使用自定义值选择自定义联系人表单7

时间:2017-09-14 作者:Controvi

我一直在寻找一种方法,用自定义数据将选择字段添加到联系人表单中。

目标是创建一个表单,在该表单中,用户可以通过使用select字段选择文章来询问有关文章的信息。

我想知道的是如何使用过滤器将自定义选择字段添加到表单中

add_filter(\'wpcf7_form_tag_data_option\', function($n, $options, $args){
    // special data provider tag found ?
    if (in_array(\'press_posts\', $options)){
        $data = array(\'Test1\', \'Test2\', \'Test3\');
        return $data;
    }
    // default - do not apply any changes within the options
    return null;
}, 10, 3);
现在我只需在表单中添加以下短代码

[select press_post include_blank id:press_select data:press_posts]
我唯一的问题是,这会导致以下html。

<select name="press_post" class="wpcf7-form-control wpcf7-select" id="press_select">
    <option value="">---</option>
    <option value="Test1">Test1</option>
    <option value="Test2">Test2</option>
    <option value="Test3">Test3</option>
</select>
正如您所看到的Test1 value和其他值一样,都有一个大写字母。这是我不想要的,我想自己设置值。

我尝试向数据数组添加密钥,但没有任何效果。

希望你们能帮助我。

****编辑****

我目前的工作方式有所不同。

function dynamic_field_values($tag){

    if ( $tag[\'name\'] != \'press_post\' )
        return $tag;

    $args = array (
        \'numberposts\'   => -1,
        \'post_type\'     => \'press_posts\',
        \'orderby\'       => \'title\',
        \'order\'         => \'ASC\',
    );

    $custom_posts = get_posts($args);

    if ( ! $custom_posts )
        return $tag;

    foreach ( $custom_posts as $custom_post ) {

        $tag[\'raw_values\'][] = $custom_post->post_title;
        $tag[\'values\'][] = $custom_post->ID;
        $tag[\'labels\'][] = $custom_post->post_title;

    }

    return $tag;
};

 add_filter( \'wpcf7_form_tag\', \'dynamic_field_values\', 10, 2);
目前,我正在研究如何在函数中获取更多数据,以便使其成为动态的。

如果有人知道如何做到这一点,如果你能与我分享这些信息,那就太好了:)

无论如何,我想在联系人表单7中调用字段的方式如下

[contact-form-7 id="9778" title="Press contact" number_of_posts="34" post_type="in_het_nieuws"]
请注意number_of_posts 以及post_type 零件。

1 个回复
SO网友:mmm

可以使用过滤器设置值wpcf7_form_tag 并使用过滤器添加短代码属性shortcode_atts_wpcf7

add_filter("wpcf7_form_tag", function($scanned_tag, $replace){


    if ("press_post" === $scanned_tag["name"]) {

        $contact_form = WPCF7_ContactForm::get_current();

        $number_of_posts = $contact_form->shortcode_attr("number_of_posts");
        $post_type = $contact_form->shortcode_attr("post_type");


        // using $number_of_posts and $post_type here


        $scanned_tag[\'raw_values\'] = [
            "number_of_posts \\"$number_of_posts\\" - post_type \\"$post_type\\" | val 1",
            "Test 2|val 2",
            "Test 3|val 3",
        ];

        $pipes = new WPCF7_Pipes($scanned_tag[\'raw_values\']);

        $scanned_tag[\'values\'] = $pipes->collect_befores();
        $scanned_tag[\'pipes\'] = $pipes;

    }


    return $scanned_tag;

}, 10, 2);


add_filter("shortcode_atts_wpcf7", function ($out, $pairs, $atts, $shortcode) {

    foreach (["number_of_posts", "post_type"] as $a) {

        if (isset($atts[$a])) {
            $out[$a] = $atts[$a];
        }

    }

    return $out;

}, 10, 4);
HTML代码中总是有“Test 2”,但CF7会在电子邮件中将该值替换为“val 2”。

结束

相关推荐

SELECT*FROM$wpdb->帖子,ID>160

我想检索所有帖子和ID大于160的相对标签。我试过:\'$args=array( \'post_type\' => \'post\', \'post_status\' => \'publish\', \'posts_per_page\' => 5, \'orderby\'=> \'ID\', \'order\' => \'desc\', \'meta_query\' => array( array(

使用自定义值选择自定义联系人表单7 - 小码农CODE - 行之有效找到问题解决它

使用自定义值选择自定义联系人表单7

时间:2017-09-14 作者:Controvi

我一直在寻找一种方法,用自定义数据将选择字段添加到联系人表单中。

目标是创建一个表单,在该表单中,用户可以通过使用select字段选择文章来询问有关文章的信息。

我想知道的是如何使用过滤器将自定义选择字段添加到表单中

add_filter(\'wpcf7_form_tag_data_option\', function($n, $options, $args){
    // special data provider tag found ?
    if (in_array(\'press_posts\', $options)){
        $data = array(\'Test1\', \'Test2\', \'Test3\');
        return $data;
    }
    // default - do not apply any changes within the options
    return null;
}, 10, 3);
现在我只需在表单中添加以下短代码

[select press_post include_blank id:press_select data:press_posts]
我唯一的问题是,这会导致以下html。

<select name="press_post" class="wpcf7-form-control wpcf7-select" id="press_select">
    <option value="">---</option>
    <option value="Test1">Test1</option>
    <option value="Test2">Test2</option>
    <option value="Test3">Test3</option>
</select>
正如您所看到的Test1 value和其他值一样,都有一个大写字母。这是我不想要的,我想自己设置值。

我尝试向数据数组添加密钥,但没有任何效果。

希望你们能帮助我。

****编辑****

我目前的工作方式有所不同。

function dynamic_field_values($tag){

    if ( $tag[\'name\'] != \'press_post\' )
        return $tag;

    $args = array (
        \'numberposts\'   => -1,
        \'post_type\'     => \'press_posts\',
        \'orderby\'       => \'title\',
        \'order\'         => \'ASC\',
    );

    $custom_posts = get_posts($args);

    if ( ! $custom_posts )
        return $tag;

    foreach ( $custom_posts as $custom_post ) {

        $tag[\'raw_values\'][] = $custom_post->post_title;
        $tag[\'values\'][] = $custom_post->ID;
        $tag[\'labels\'][] = $custom_post->post_title;

    }

    return $tag;
};

 add_filter( \'wpcf7_form_tag\', \'dynamic_field_values\', 10, 2);
目前,我正在研究如何在函数中获取更多数据,以便使其成为动态的。

如果有人知道如何做到这一点,如果你能与我分享这些信息,那就太好了:)

无论如何,我想在联系人表单7中调用字段的方式如下

[contact-form-7 id="9778" title="Press contact" number_of_posts="34" post_type="in_het_nieuws"]
请注意number_of_posts 以及post_type 零件。

1 个回复
SO网友:mmm

可以使用过滤器设置值wpcf7_form_tag 并使用过滤器添加短代码属性shortcode_atts_wpcf7

add_filter("wpcf7_form_tag", function($scanned_tag, $replace){


    if ("press_post" === $scanned_tag["name"]) {

        $contact_form = WPCF7_ContactForm::get_current();

        $number_of_posts = $contact_form->shortcode_attr("number_of_posts");
        $post_type = $contact_form->shortcode_attr("post_type");


        // using $number_of_posts and $post_type here


        $scanned_tag[\'raw_values\'] = [
            "number_of_posts \\"$number_of_posts\\" - post_type \\"$post_type\\" | val 1",
            "Test 2|val 2",
            "Test 3|val 3",
        ];

        $pipes = new WPCF7_Pipes($scanned_tag[\'raw_values\']);

        $scanned_tag[\'values\'] = $pipes->collect_befores();
        $scanned_tag[\'pipes\'] = $pipes;

    }


    return $scanned_tag;

}, 10, 2);


add_filter("shortcode_atts_wpcf7", function ($out, $pairs, $atts, $shortcode) {

    foreach (["number_of_posts", "post_type"] as $a) {

        if (isset($atts[$a])) {
            $out[$a] = $atts[$a];
        }

    }

    return $out;

}, 10, 4);
HTML代码中总是有“Test 2”,但CF7会在电子邮件中将该值替换为“val 2”。

相关推荐

WordPress select query issue

正在尝试从中提取所有数据wp_postmeta 桌子我想先去拿meta_key 列值。因此,我正在运行此查询。当我使用print_r 然后显示所有数据,但当我使用foreach循环时,它不工作。<?php global $wpdb; $myrows = $wpdb->get_results( \"SELECT * FROM wp_postmeta\" ); foreach($myrows as $value){ echo $value->sleep