获取存储在 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 中的转发器子字段的所有值的主要内容,如果未能解决你的问题,请参考以下文章

ACF 从父页面获取转发器的子字段

而不是所有表上的插入触发器

输入值与转发器字段的乘法总和

Firebird - 获取触发器内的所有修改字段

MySql 触发器删除同一张表中的子记录

想写一个DB2触发器,几张表有关联,修改其中一张主表中的某一个字段,其他关联表中的该字段也跟着联动修改