我在您的代码中看到了三个问题:
您的表单没有action 设置应将其添加并将值设置为admin-post.php.
<form method="POST" action="<?php echo esc_url( admin_url( \'admin-post.php\' ) ); ?>">
因为处理表单然后发送电子邮件的功能连接到
admin_post_submit_support_ticket (即。
admin_post_<action>) 那个钩子只在
wp-admin/admin-post.php.
英寸_submit_support_ticket(), 这个isset($_POST[\'support_ticket_hash\']) 应该是! isset($_POST[\'support_ticket_hash\']) 因为如果没有,即使存在有效的nonce,页面也会退出。if( ! isset($_POST[\'support_ticket_hash\']) || ! wp_verify_nonce( $_POST[\'support_ticket_hash\'], \'submit_support_ticket\' ) ){
//echo \'\';
exit;
}
电子邮件主题实际上是空的,不会发送电子邮件。因此,请确保您的“请求类型”下拉列表具有有效的选项(当前option\'svalue 为空)。wp_mail( \'test@example.com\', \'\', \'Testing\' ); // bad; subject is empty
wp_mail( \'test@example.com\', \'Hi\', \'Testing\' ); // good; subject is good..
事实上,如果你看wp_mail()\'s docs, 主题是必需的参数。因此,再次确保<option> 有一个很好的主题,尽管最好在PHP中编写主题,而不是从表单中发送。<p><?php _e(\'Request type\'); ?></p>
<select name="support_ticket_type">
<option value="Support request"><?php _e(\'Support request\'); ?></option>
<option value="Modification request"><?php _e(\'Modification request\'); ?></option>
</select>
发送电子邮件后,应将用户发送回仪表板页面,以防止他们看到空白页面。所以在
wp_mail() 打电话,您可以:
wp_redirect( admin_url() );
exit;
此外,您应该始终
sanitize 用户提供的数据。永远不要相信他们的意见,即使你真的相信这个人。。。