我在您的代码中看到了三个问题:
您的表单没有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( \'[email protected]\', \'\', \'Testing\' ); // bad; subject is empty
wp_mail( \'[email protected]\', \'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 用户提供的数据。永远不要相信他们的意见,即使你真的相信这个人。。。