【问题标题】:add_action( 'wpcf7_before_send_mail') doesnt call/hook my functionadd_action('wpcf7_before_send_mail') 不调用/挂钩我的函数
【发布时间】:2018-03-25 19:14:59
【问题描述】:

我正在尝试从我们的 Contact7 表单之一发布数据,然后将该数据保存在 mysql 表中。我对 WordPress 很陌生。我遵循其他人的代码。但是我没有运气在我的表中接收数据。我觉得 add_action-wpcf7_before_send_mail 无法挂钩我的函数,因为我在函数内部编写了拼写错误或遗漏的代码来测试它是否有效。但是当我从我的 wordpress 表单提交数据时没有显示错误。以下是我的代码,请评论任何可能有帮助的内容。谢谢!

add_action('wpcf7_before_send_mail','contactform7_before_send_mail',1);

function contactform7_before_send_mail( $contact_form ) {       
  $wpcf7_data->skip_mail = true;
  global $wpdb;   
  $title = $contact_form->title();   

  $submission = WPCF7_Submission::get_instance();
  if ( $submission ) {
    $formData = $submission->get_posted_data();     
  }

  if ( 'Membership-2' == $title ) {   
    $name = $formData['your-name'];     
    $email = $formData['your-email'];   
    $company = $formData['your-company'];   
    $title = $formData['your-title'];   
    $location = $formData['your-location']; 
  }

  $wpdb->insert('aoe84i5nxf_member_info', array('id' => null,'name' => $name,'email' => $email,'company' => $company,'title' => $title, 'location' => $location), array(null,'%s','%s','%s','%s','%d') ); 
}
remove_all_filters ('wpcf7_before_send_mail');

【问题讨论】:

  • 你最后有remove_all_filters,它会删除你添加到钩子中的内容。要保存表单值,您是否尝试过插件 Flamingo ? wordpress.org/plugins/flamingo
  • 非常感谢,现在可以了! :)

标签: php mysql wordpress contact-form-7


【解决方案1】:

试试这个:

add_action('wpcf7_before_send_mail','contactform7_before_send_mail',1);

function contactform7_before_send_mail( $contact_form ) {       

    if ( !isset($contact_form->posted_data) && class_exists('WPCF7_Submission') ) {
        $submission = WPCF7_Submission::get_instance();
        if ( $submission ) {
            $formData = $submission->get_posted_data();     
        }
    } else {
        // We can't retrieve the form data
        return $contact_form;
    }

    if ( 'Membership-2' == $contact_form->title() ) {   
        $contact_form->skip_mail = true;

        $name = $formData['your-name'];     
        $email = $formData['your-email'];   
        $company = $formData['your-company'];   
        $title = $formData['your-title'];   
        $location = $formData['your-location']; 

        global $wpdb;
        $wpdb->insert('aoe84i5nxf_member_info', array('id' => null,'name' => $name,'email' => $email,'company' => $company,'title' => $title, 'location' => $location), array(null,'%s','%s','%s','%s','%d') ); 
    }

    return $contact_form;

}

这对您的代码进行了一些更改:

  1. 检查我们是否可以检索表单提交数据。
  2. 更正了一些表单数据对象变量名称 ($wpcf7_data)。
  3. 确保skip_mail 和数据库插入仅发生在Membership-2 表单提交中。
  4. 删除 remove_all_filters 行 - 这只会解除自定义函数的挂钩,因此它永远不会运行。

【讨论】:

    猜你喜欢
    • 2017-06-18
    • 1970-01-01
    • 1970-01-01
    • 2013-05-21
    • 2020-08-01
    • 2011-09-16
    • 2014-10-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多