从 acf 转发器到 cf7 下拉列表的值数组
array of values from acf repeater into cf7 dropdown
我正在尝试使用来自 acf 中继器的值填充 cf7 下拉列表。如果我使用常规的硬编码数组,它工作得很好,所以不知何故我在获取转发器字段的值时搞砸了。
这是我得到的 rn,试图将值推入数组:
add_filter('wpcf7_form_tag_data_option', function($n, $options, $args) {
if (in_array('gigs', $options)){
$gigs = array();
if( have_rows('termine') ):
while ( have_rows('termine') ) : the_row();
$gigs[] = get_sub_field('termin');
endwhile;
endif;
return $gigs;
}
return $n;
}, 10, 3);
尝试稍微移动 return 语句,但这也无济于事,我对几乎不存在的 php 知识感到茫然。
任何我出错的想法或指示都将不胜感激。
您必须 return $n
为 null 或为数组的值。你很接近,但你 return 做错了。如何使用此过滤器的一个很好的示例是查看 listo.php 中的代码,您可以看到此过滤器的正确用法。
话虽如此......如果不测试你的 ACF 值,我不能说你的函数是否会 return 那些......但是下面的函数已经过测试并且会 return 数据到如果 ACF 功能有效,您的 select 和 data:gigs
。
要检索包含 post 的 post_id
,您需要深入研究单元标记,并获取页面 ID。全局 $post
不会在这个过滤器中工作,因为它没有将任何循环属性传递给函数,所以你必须用第二个参数指定你的 ACF 字段 - 它需要是父 post ID.
add_filter( 'wpcf7_form_tag_data_option', 'dd_filter_form_tag_data', 10, 3 );
function dd_filter_form_tag_data( $n, $options, $args ) {
// Get the current form.
$cf7 = wpcf7_get_current_contact_form();
// Get the form unit tag.
$unit_tag = $cf7->unit_tag();
// Turn the string into an array.
$tag_array = explode( '-', $unit_tag );
// The 3rd item in the array will be the page id.
$post_id = substr( $tag_array[2], 1 );
if ( in_array( 'gigs', $options, true ) ) {
$gigs = array();
if ( have_rows( 'termine', $post_id ) ) :
while ( have_rows( 'termine', $post_id ) ) :
the_row();
$gigs[] = get_sub_field( 'termin' );
endwhile;
endif;
$n = array_merge( (array) $n, $gigs );
}
return $n;
}
我正在尝试使用来自 acf 中继器的值填充 cf7 下拉列表。如果我使用常规的硬编码数组,它工作得很好,所以不知何故我在获取转发器字段的值时搞砸了。
这是我得到的 rn,试图将值推入数组:
add_filter('wpcf7_form_tag_data_option', function($n, $options, $args) {
if (in_array('gigs', $options)){
$gigs = array();
if( have_rows('termine') ):
while ( have_rows('termine') ) : the_row();
$gigs[] = get_sub_field('termin');
endwhile;
endif;
return $gigs;
}
return $n;
}, 10, 3);
尝试稍微移动 return 语句,但这也无济于事,我对几乎不存在的 php 知识感到茫然。
任何我出错的想法或指示都将不胜感激。
您必须 return $n
为 null 或为数组的值。你很接近,但你 return 做错了。如何使用此过滤器的一个很好的示例是查看 listo.php 中的代码,您可以看到此过滤器的正确用法。
话虽如此......如果不测试你的 ACF 值,我不能说你的函数是否会 return 那些......但是下面的函数已经过测试并且会 return 数据到如果 ACF 功能有效,您的 select 和 data:gigs
。
要检索包含 post 的 post_id
,您需要深入研究单元标记,并获取页面 ID。全局 $post
不会在这个过滤器中工作,因为它没有将任何循环属性传递给函数,所以你必须用第二个参数指定你的 ACF 字段 - 它需要是父 post ID.
add_filter( 'wpcf7_form_tag_data_option', 'dd_filter_form_tag_data', 10, 3 );
function dd_filter_form_tag_data( $n, $options, $args ) {
// Get the current form.
$cf7 = wpcf7_get_current_contact_form();
// Get the form unit tag.
$unit_tag = $cf7->unit_tag();
// Turn the string into an array.
$tag_array = explode( '-', $unit_tag );
// The 3rd item in the array will be the page id.
$post_id = substr( $tag_array[2], 1 );
if ( in_array( 'gigs', $options, true ) ) {
$gigs = array();
if ( have_rows( 'termine', $post_id ) ) :
while ( have_rows( 'termine', $post_id ) ) :
the_row();
$gigs[] = get_sub_field( 'termin' );
endwhile;
endif;
$n = array_merge( (array) $n, $gigs );
}
return $n;
}