常用钩子

wpcf7Submit 提交表单后

查询用户提交的ContactForm数据

由于提交到Flamingo的数据实际上是写进wp_posts表的,写入的post_type为flamingo_inbound;
使用WP_Query进行查询

  1. <?php
  2. if (is_user_logged_in()) {
  3. // 判断用户是否已登录
  4. $curUserID = get_current_user_id(); // 当前用户id
  5. // 重置请求数据 - 清空此前的页面请求数据
  6. wp_reset_postdata();
  7. $userInquiriesQuery = new WP_Query(
  8. array(
  9. 'author' => $curUserID . '',
  10. 'post_type' => 'flamingo_inbound',
  11. 'posts_per_page' => 10
  12. ));
  13. if ($userInquiriesQuery->have_posts()) {
  14. $inquiriesPosts = $userInquiriesQuery->get_posts();
  15. foreach ($inquiriesPosts as $inquiryPost) {//再次判断是否有结果
  16. // 采用Flamingo类进行获取和转化为Flamingo对象,fields就是表单字段的key-value了;
  17. $flamingoPost = new Flamingo_Inbound_Message($inquiryPost->ID);
  18. if (!empty($flamingoPost->id())) {
  19. // 判断一下是否有id,如果没有,则可能该post数据并不存在关联的flamingo数据;
  20. // flamingo数据处理
  21. }else{
  22. // 非flamingo数据处理
  23. }
  24. }
  25. }
  26. // 使用数据完毕,再次清空,防止污染
  27. wp_reset_postdata();
  28. }

以上代码是大致的迭代获取post转化为flamingo的过程,17行得到的$flamingoPost已经是个开箱即用的对象了,大部分需要迭代的信息都储存在了$flamingoPost->fields中,以key-value形式可以读取出来,例如,快速输出表格

<?php
foreach ($flamingoPost->fields as $postFieldKey => $postField) {
                        $flamingoProductsTemplate .= '<div class="text-lg ">' . $postFieldKey . ' : ' . $postField . '</div>';
                    }

在Vidastone的开发中,这里的fields还包含了一个product-ids的字段,用来储存用户在提交表单的时候,用“,”把提交的产品对象的ID串联储存,所以这里可以还原一下

<?php
 foreach (explode(',', $flamingoPost->fields['product-ids']) as $pid) {
                            // woo product
                            $wcProduct = WC()->product_factory->get_product($pid);
                            $product_data = $wcProduct->get_data();
 }

这样,我们就得到WooCommerrce中的产品信息了;