常用钩子
wpcf7Submit
提交表单后
查询用户提交的ContactForm数据
由于提交到Flamingo的数据实际上是写进wp_posts表的,写入的post_type为flamingo_inbound;
使用WP_Query进行查询
<?php
if (is_user_logged_in()) {
// 判断用户是否已登录
$curUserID = get_current_user_id(); // 当前用户id
// 重置请求数据 - 清空此前的页面请求数据
wp_reset_postdata();
$userInquiriesQuery = new WP_Query(
array(
'author' => $curUserID . '',
'post_type' => 'flamingo_inbound',
'posts_per_page' => 10
));
if ($userInquiriesQuery->have_posts()) {
$inquiriesPosts = $userInquiriesQuery->get_posts();
foreach ($inquiriesPosts as $inquiryPost) {//再次判断是否有结果
// 采用Flamingo类进行获取和转化为Flamingo对象,fields就是表单字段的key-value了;
$flamingoPost = new Flamingo_Inbound_Message($inquiryPost->ID);
if (!empty($flamingoPost->id())) {
// 判断一下是否有id,如果没有,则可能该post数据并不存在关联的flamingo数据;
// flamingo数据处理
}else{
// 非flamingo数据处理
}
}
}
// 使用数据完毕,再次清空,防止污染
wp_reset_postdata();
}
以上代码是大致的迭代获取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中的产品信息了;