仪表板小部件表单不提交邮件

时间:2020-03-07 作者:sialfa

我第一次添加了wordpress仪表板小部件。我正在创建一个简单的表单,让用户能够直接从wp仪表板发送支持请求。我不确定所有代码是否都正常工作,在测试期间,我注意到表单不会提交邮件消息。有人能帮我吗?

function uptheme_support_dashboard_widgets()
  {
    global $wp_meta_boxes;
    wp_add_dashboard_widget(\'custom_help_widget\', \'Premium Ticket System\', \'custom_dashboard_help\');
  }

  function custom_dashboard_help()
  {
    $current_theme = wp_get_theme( \'uptheme-panel\' );
    ?>
      <p><?php _e(\'Hi! you are using the custom theme \'. esc_html($current_theme) ); ?></p>
      <p><?php _e(\'Use the form to request support for your theme.\'); ?></p>
      <form method="POST">
      <p><?php _e(\'Email\'); ?></p>
        <input type="text" class="widefat" name="email" id="email" placeholder="" />
      <p><?php _e(\'Request type\'); ?></p>
        <select name="support_ticket_type">
          <option value=""><?php _e(\'Support request\'); ?></option>
          <option value=""><?php _e(\'Modification request\'); ?></option>
        </select>
      <p><?php _e(\'Message\'); ?></p>
        <textarea class="widefat" name="support_message"></textarea>
        <input type="hidden" name="action" value="submit_support_ticket">
        <?php wp_nonce_field( \'submit_support_ticket\', \'support_ticket_hash\' ); ?>
        <button class="btn-primary" type="submit" class=""><?php _e(\'Invia\'); ?></button>
      </form>
      <small><?php _e(\'Theme powered by\'); ?><a href="#"><?php _e(\'theme author\'); ?></a></small>
    <?php
  }
  add_action(\'wp_dashboard_setup\', \'uptheme_support_dashboard_widgets\');


  function _submit_support_ticket()
  {
    if( isset($_POST[\'support_ticket_hash\']) || ! wp_verify_nonce( $_POST[\'support_ticket_hash\'], \'submit_support_ticket\' ) ){
      //echo \'\';
      exit;
    }
    $email = $_POST[\'email\'];
    $subject = $_POST[\'support_ticket_type\'];
    $message = $_POST[\'support_message\'];
    $to = \'[email protected]\';
    $headers[] = "From: <$email>";
    wp_mail( $to, $subject, $message, $headers );
  }
  add_action( \'admin_post_submit_support_ticket\', \'_submit_support_ticket\' );

1 个回复
最合适的回答,由SO网友:Sally CJ 整理而成

我在您的代码中看到了三个问题:

您的表单没有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 用户提供的数据。永远不要相信他们的意见,即使你真的相信这个人。。。

    相关推荐

    带有PHP问题的快捷代码“未定义的索引”

    我正在创建一个短代码来显示不同大小的图像:大、小和常规。用户可以选择设置large=\"true\" 或small=\"true\" 在编写短代码以输出正确的图像代码时。当短代码处于活动状态时,我在前端遇到了一个PHP问题,下面的消息是large 和/或small 未设置为true或false:注意:未定义索引:大in/wp-content/themes/mysite/functions。php在线1449注意:未定义的索引:在/wp content/themes/mysite/functions中较大。