获取存储在 DB 中的转发器子字段的所有值
Posted
技术标签:
【中文标题】获取存储在 DB 中的转发器子字段的所有值【英文标题】:Get all values of repeater subfields stored in DB 【发布时间】:2020-04-10 10:16:06 【问题描述】:目前,我正在努力使用 ACF(高级自定义字段)转发器字段。第一个问题是这种字段类型的一般架构——它不是存储在数据库中的一个地方,而是成倍增加(例如,如果我的转发器字段名称称为workshop_grouping,子字段称为data,那么就会有workshop_grouping_1_data、workshop_grouping_2_data等.)。
所以我想比 ACF (:)) 更聪明,并且我认为如果我将使用下面的代码从 CPT 获取所有帖子 ID,那么它会更容易。这是代码:
<?php
$other_page = get_posts( array(
'posts_per_page' => -1,
'fields' => 'ids',
'post_type' => 'workshops',
'post_status' => 'publish',
) );
if( have_rows('workshops_grouping', $other_page) ): ?>
<select id="no1">
<?php while( have_rows('workshops_grouping', $other_page) ): the_row(); ?>
<option value="<?php the_sub_field('data'); ?>"><?php the_sub_field('data'); ?></option>
<?php endwhile; ?>
</select>
<select id="no2">
<?php while( have_rows('workshops_grouping', $other_page) ): the_row(); ?>
<option value="<?php the_sub_field('company'); ?>"><?php the_sub_field('company'); ?></option>
<?php endwhile; ?>
</select>
<?php endif; ?>
但是,你猜怎么着——它根本不起作用。意思=它什么也没显示。我在这里以及 ACF 的官方社区委员会上也浏览了一些类似的帖子。到目前为止没有成功。它甚至可行吗?
【问题讨论】:
【参考方案1】:根据 ACF 文档,您必须在 have_rows 函数中传递一个 ID。 https://www.advancedcustomfields.com/resources/have_rows/
现在您在函数内部传递 $other_page 变量。此变量是包含您的页面的数组。您需要先循环并在 de have_rows 函数中传递帖子 ID。
您的代码将类似于以下内容:
<?php
$other_page = get_posts( array(
'posts_per_page' => -1,
'fields' => 'ids',
'post_type' => 'workshops',
'post_status' => 'publish',
) );
foreach ( $other_page as $page )
if( have_rows('workshops_grouping', $page->ID) ): ?>
<select id="no1">
<?php while( have_rows('workshops_grouping', $page->ID) ): the_row(); ?>
<option value="<?php the_sub_field('data'); ?>"><?php the_sub_field('data'); ?></option>
<?php endwhile; ?>
</select>
<select id="no2">
<?php while( have_rows('workshops_grouping', $page->ID) ): the_row(); ?>
<option value="<?php the_sub_field('company'); ?>"><?php the_sub_field('company'); ?></option>
<?php endwhile; ?>
</select>
<?php endif;
确保变量 $other_page 有一些页面,并且 ACF 字段 Workshop_grouping 有一些行。
【讨论】:
以上是关于获取存储在 DB 中的转发器子字段的所有值的主要内容,如果未能解决你的问题,请参考以下文章