联系表格7,发布数据以分离php文件

时间:2017-07-20 17:33:31

标签: php wordpress hook action contact-form-7

我使用CF7获取用户详细信息。 当用户提交表单时,我想将输入字段输入到我的custom.php文件中并在那里做一些事情。

我尝试使用js on_sent_ok:URL / custom.php?.....字段数据....但我认为这不是正确的方法。但无论如何这对我有用。

有没有办法用钩子动作做到这一点?我试过这个。

function wpcf7_do_something (&$cfdata) {
   $goURL = 'http://contactform7.com';
   $cfdata->set_properties( array( 'additional_settings' => "on_sent_ok: \"location = '".$goURL."';\"" ) );
 }
 add_action("wpcf7_before_send_mail", "wpcf7_do_something");

我试图回应一些东西,试探一下js console.log,并在wpcf7_do_something函数内重定向,但没有任何作用。我真的不知道它是否有用。

有没有办法测试此操作是否有效? 有没有办法重定向到另一个位置?

Thnx

1 个答案:

答案 0 :(得分:3)

成功提交后转发用户后,您的表单数据将丢失。您可以通过挂钩到CF7提供的before_send_mail操作挂钩来拦截WP中的表单数据处理。这允许您访问服务器上的表单数据,必要时对其进行预处理,然后将数据发布到自定义处理器脚本。

 // Create the new wordpress action hook before sending the email from CF7
add_action( 'wpcf7_before_send_mail', 'my_conversion' );
   function my_conversion( $contact_form ) {
   $submission = WPCF7_Submission::get_instance();

  // Get the post data and other post meta values.
if ( $submission ) {
    $posted_data = $submission->get_posted_data();

  // these variables are examples of other things you may want to pass to your custom handler
    $remote_ip = $submission->get_meta( 'remote_ip' );
    $url = $submission->get_meta( 'url' );
    $timestamp = gmdate("Y-m-d H:i:s", $submission->get_meta( 'timestamp' ));
    $title = wpcf7_special_mail_tag( '', '_post_title', '' );

  // If you have checkboxes or other multi-select fields, make sure you convert the values to a string  
    $mycheckbox1 = implode(", ", $posted_data["checkbox-465"]);
    $mycheckbox2 = implode(", ", $posted_data["checkbox-466"]);


  // Encode the data in a new array in JSON format
  $data = json_encode(array(
      "posted_key_name_1" => "{$posted_data["input-name-1"]}",
      "posted_key_name_2" => "{$posted_data["input-name-2"]}",
      "posted_key_name_..." => "{$posted_data["input-name-..."]}",
      "posted_key_name_n" => "{$posted_data["input-name-n"]}",
      // any additional data to include that wasn't part of the form post?
      "From URL" => "$url",
      "From IP" => "$remote_ip",
      "Page Title" => "$title"
      ));

   // Finally send the data to your custom endpoint
        $ch = curl_init("https://www.YOURDOMAIN.com/custom.php");
        curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");
        curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
        curl_setopt( $ch, CURLOPT_HTTPHEADER, array('Content-Type:application/json'));
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
        curl_setopt($ch, CURLOPT_CONNECTTIMEOUT ,5); //Optional timeout value
        curl_setopt($ch, CURLOPT_TIMEOUT, 5); //Optional timeout value
        $result = curl_exec($ch);
        curl_close($ch);

    return $result;
      }
    }
  }

这将在CF7处理表单并发送确认邮件之前将选定的表单数据发布到您的自定义处理器。您仍然希望通过显示表单已提交的CF7确认消息或使用JS重定向将用户转发到感谢页面来确保用户体验令人满意 - > on_sent_ok:https://yourdomain.com/thanks/

如果用户需要访问您的自定义处理器页面,因为处理器页面生成对用户重要的信息,您可以将所有表单数据打包成URL字符串并将其附加到处理URL。然后,在您的processing.php代码中,您使用$ _GET []来访问数据。

有关如何动态更新设置重定向网址的详细信息,请参阅此文章:How to change contact form 7 Redirecting URL dynamically - WordPress

从此页面提交数据到webhook代码:http://moometric.com/integrations/wp/contact-form-7-zapier-webhook-json-post/