我正在从事一个个人项目,其中包括多个自定义字段(通过ACF创建)。其中一些是中继器类型。
我想显示这些中继器子字段值的3个阵列/块。为了更好地理解,我有一个repeater字段:open\\u workshops,该字段包括子字段:日期、位置、合作伙伴关系。
我只想显示存储在DB中的那些子字段中的所有值。类似于:
开放式研讨会:
日期:2017年1月、2017年2月。。。2019年12月等
地点:纽约、华沙。。。
合作伙伴:安永、谷歌。。
我注意到了什么问题-首先,由于字段类型(中继器),很难在DB中找到这些值。因为它不是一个单独的字段,但ACF复制了它们的名称,所以我不需要寻找单独的字段:open\\u workshops\\u date,而是需要找到:open\\u workshops\\u 0\\u date、open\\u workshops\\u 1\\u date等。
我的初始代码是:
if( have_rows(\'open_workshops\') ):
while ( have_rows(\'open_workshops\') ) : the_row();
$sub_value_1 = get_sub_field(\'date\');
$sub_value_2 = get_sub_field(\'location\');
$sub_value_3 = get_sub_field(\'partnerships\');
echo \'$sub_value_1\';
echo \'$sub_value_2\';
echo \'$sub_value_3\';
endwhile;
else :
// no rows found
endif;
我也尝试过这篇帖子的建议:
Retrieving all data from repeater fields但它什么也没显示出来。
最合适的回答,由SO网友:RiddleMeThis 整理而成
我认为ACF没有一个内置的功能来做你想做的事情。您可以使用get_field 从任何帖子中检索值,但如果希望从当前帖子以外的其他帖子中获取值,则需要帖子ID。
因此,我们可以使用WP_Query 并传递自定义字段的元键。
这里有一个例子。
$args = array(
\'post_type\' => \'page\', // Add your post type here
\'meta_key\' => \'test_repeater\' // Add your repeater name here
);
$the_query = new WP_Query($args);
if ($the_query->have_posts()):
while ($the_query->have_posts()) : $the_query->the_post();
if(have_rows(\'test_repeater\')): // Add your repeater here
while (have_rows(\'test_repeater\')) : the_row(); // Add your repeater here
// display your sub fields
the_sub_field(\'sub_field_one\');
the_sub_field(\'sub_field_two\');
endwhile;
else :
// no rows found
endif;
endwhile;
endif;
我将上述代码添加到一个页面模板中,它将吐出
test_repeater
对于任何
page
已填写这些自定义字段的。
已测试并正常工作。
SO网友:Guru Bhajan Singh
ACF的Repeater字段遵循一个简单的方法,这组代码将帮助您。
if( get_field(\'open_workshops\', get_the_ID()) ):
$counter = 0;
while( the_repeater_field(\'open_workshops\', get_the_ID())):
//this sets up the counter starting at 0
echo get_field(\'open_workshops_\'.$counter.\'_date\', get_the_ID());
echo get_field(\'open_workshops_\'.$counter.\'_location\', get_the_ID());
echo get_field(\'open_workshops_\'.$counter.\'_partnerships\', get_the_ID());
$counter++; // add one per row
endwhile;
endif;