联系表格7:仅在提交特定表格后才调用功能

问题描述 投票:1回答:1

我正在编写我的第一个插件。它就像是主题的插件,可以为主题添加有用的东西。其中之一是,我收集食物数据,这就是为什么我允许用户通过联系表添加不同食物的原因。表单本身是非常标准的,我正在使用save_posted_data钩子创建食物帖子(作为自定义帖子类型)。

看起来像:

function save_posted_data( $posted_data ) {

$form_id = $contact_form->id();
if( $form_id == 1903 ) {

    $args = array(
        'post_type' => 'np-food',
        'post_status'=>'draft',
        'post_title'=>$posted_data['food-name'],
        'post_content'=>$posted_data['food-desc'],
    );
    $post_id = wp_insert_post($args);

    if(!is_wp_error($post_id)){
        if( isset($posted_data['food-name']) ){
            update_post_meta($post_id, 'food-name', $posted_data['food-name']);
        }
        // and so on
    }
}
return $posted_data;
}
add_filter( 'wpcf7_posted_data', 'save_posted_data' );

我的问题是:检查表单时,该部分仅应在所选表单是用户使用的表单时创建一个帖子。但这在这里不起作用,因为单击提交时,所有其他CF 7表单都会陷入无限循环。仅表单1903做某事(创建带有所需元字段的帖子)。其他所有都不起作用。

有人知道我在这里想念的吗?

wordpress plugins contact-form-7
1个回答
1
投票

您可以在before_send_mail上获取提交的内容,并检查您的字段名称以备援。

add_action( 'wpcf7_before_send_mail', 'save_posted_data' );
function save_posted_data( $contact_form ) {

    $submission = WPCF7_Submission::get_instance();
        if ( $submission ) {
            $posted_data = $submission->get_posted_data();    
    }
    // This checks for the form tag [food-name]
    if (empty($posted_data['food-name']) || !isset($posted_data['food-name'])) return;

    // Or use this to check for form by ID (remove previous if)
    // if ($posted_data['_wpcf7'] !== '{your_form_id}') return;

    $args = array(
        'post_type' => 'np-food',
        'post_status'=>'draft',
        'post_title'=>$posted_data['food-name'],
        'post_content'=>$posted_data['food-desc'],
    );
    $post_id = wp_insert_post($args);

    if(!is_wp_error($post_id)){
        if( isset($posted_data['food-name']) ){
            update_post_meta($post_id, 'food-name', $posted_data['food-name']);
        }
        // and so on
    }
}

您也可以使用包含表单ID _wpcf7的字段$posted_data['_wpcf7']

所以您的“ IF”就是这个:

if ($posted_data['_wpcf7'] !== '1903') return;

对于多种表格提交和功能,您可以这样做:

if ($posted_data['_wpcf7'] == '{your_form_id}') {
    // do stuff when form id = first
} else if ($posted_data['_wpcf7'] == 'second_form_id') {
   // do more stuff
}
© www.soinside.com 2019 - 2024. All rights reserved.