从 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;
}