我一直在寻找一种方法,用自定义数据将选择字段添加到联系人表单中。
目标是创建一个表单,在该表单中,用户可以通过使用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
零件。
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”。