【问题标题】:Advanced Custom Fields: Select values and create repeater rows高级自定义字段:选择值并创建重复行
【发布时间】:2020-07-18 00:55:52
【问题描述】:

我有一个自定义帖子类型的帖子列表。我想要做的是让用户选择(复选框)他们想要添加的所有帖子,并为每个选择创建一个重复行。

在转发器中,我使用了一个帖子对象字段——这个帖子对象字段与自定义帖子类型帖子的复选框相同。 (我正在这样做,因为我需要从每个帖子中提取信息,然后用户可以为该行分配更多选项)

那么,我将如何允许用户选择这些帖子,然后在单击按钮时填充转发器行?选择值是来自此转发器的帖子对象值...

任何帮助都将不胜感激,因为我在这方面花费了太长时间,但没有看到任何解决方案!

【问题讨论】:

  • 请发布您的中继器字段设置的代码和可能的屏幕截图。可能有更好的方法来做到这一点。
  • 我的转发器字段是帖子对象(item_post)和数量(数量)-基本上对于每一行,我希望用户选择一个帖子并输入数量。帖子对象的原因是因为我想要这个数量字段 x 重量(来自自定义帖子类型)。由于有很多帖子,我想要复选框,以便用户可以快速选择所有帖子,然后他们可以通过转发器字段来设置每个帖子的数量。除非有更简单的方法?
  • 正如@disinfor 所说,如果我们能看到您的 ACF 字段已设置的屏幕截图以及显示它们的代码,那将会有所帮助。
  • 中继器名称 = select_posts。 Sub Fields = item_post(发布对象)数量(数量)
  • 仍然不是我们要求的信息...请编辑您的问题以包含 ACF 字段设置的完整详细信息(屏幕镜头对此很好)和您的相关代码。您需要帮助我们来帮助您(即使是下面的答案也比您在他们的帖子上付出了更多的努力!)。请查看How do I ask a good question 和此Question Checklist 以了解您在提问时的期望。

标签: php wordpress advanced-custom-fields


【解决方案1】:

创建一个新的字段组并将其与您需要的帖子类型相关联。

在此字段组中创建一个名为 posts 的字段并将其设为关系类型字段,使用您希望可选择的帖子类型进行过滤以创建重复字段行。

确保返回格式设置为Post ID


然后创建一个名为 posts_repeater 的转发器字段,其中包含子行 post(发布对象字段)和数量(数字字段)。

确保post(发布对象字段)返回格式也设置为Post ID


现在将此添加到您的函数中。 (阅读我的代码 cmets)

// run modifications when saving or updating the post
add_action('acf/save_post', 'acf_save_post_type', 20);

/**
 * action to run modifications when saving or updating the post
 * @param int $post_id
 * @return void
 */
function acf_save_post_type($post_id) {

    // get our current global post object
    global $post;

    // check we are on the correct post type else return now
    if($post->post_type <> 'post') return;

    // if post post status is publish or draft
    if($post->post_status == 'publish' || $post->post_status == 'draft') {

        // if posts repeater does not already have any rows set
        if (!get_field('posts_repeater', $post_id)) {

            // get the posts relationship field
            $posts = get_field('posts', $post_id);

            // create an empty repeater field array
            $repeater = [];

            // for each post selected in posts relationship field
            foreach ($posts as $key => $value) {
                
                // add repeater row and assign current posts field id to post object field
                $repeater[] = [
                    'post' => $value
                ];

            }

            // temp remove the save post action
            remove_action('acf/save_post', 'acf_save_post_type', 20);
            
            // create the repeater field rows
            update_field('posts_repeater', $repeater, $post_id);

            // re add the save post action
            add_action('acf/save_post', 'acf_save_post_type', 20);
        
        }

    }

}

然后,当在管理员中更新帖子时,这将使用在 posts 字段中选择的帖子填充转发器。

但如果posts_repeater 字段已经有行,则不会发生任何事情。


所以在您的帖子编辑器中,如果您在posts acf 关系字段中选择一些帖子...


然后单击更新,您现在会注意到 posts_repeater 字段具有来自每个转发器行中定义的 posts 字段的选择帖子。准备好填充数量。


如果你再次更新帖子,因为转发器字段现在有行数据,什么都不会发生。

用户必须通过转发器字段手动添加任何额外的帖子。

【讨论】:

  • 感谢您在 Stack Overflow 上所做的努力,但不鼓励回答低质量问题,因为它只会鼓励更多低质量问题(这个问题距离被关闭只有一票),因此您自己可能会被否决,即使是一个好的答案 - 请参阅"Answer well-asked questions" section in "How to write a good answer"。相反,你的努力最好用于为那些努力解决问题的人提供答案......如果有人正在寻求帮助,他们应该至少付出和你一样多的努力:)
  • @FluffyKitten 这个问题的问题在于它对于基于前端的插件来说更具概念性,它不一定有代码开始。但我听到了。只是想帮助 wordpress 窥视。
  • 这类问题不适合 Stack Overflow(这就是为什么它要关闭投票)。但 OP 也没有提供特别要求的额外信息......我完全愿意帮助那些愿意付出努力并与我们一起工作以获得答案的人,但如果 他们 不愿意付出努力,我认为他们期望 我们 这样做是不公平的 :)
  • @joshmoto 感谢您的回答-谢谢-而不是选择帖子的帖子对象,我希望它们呈现为复选框值,以便用户可以简单地检查每个帖子。但是,我可能会使用此代码并进一步详细说明。 FluffyKitten - 感谢您的回复,我很抱歉这个含糊的问题,但我并没有真正开始的基础
  • 我很抱歉这个模糊的问题,但我真的没有一个基础”@PaulVI 在这种情况下你的问题是题外话。问题应该是关于一个特定的与编码相关的问题,并且您应该在发布之前研究您的问题并尝试解决它。请参阅How do I ask a good questionQuestion Checklist。如果您自己尝试后仍有问题,请返回并发布有关您遇到的具体问题的问题,以便我们提供帮助。
猜你喜欢
  • 1970-01-01
  • 2016-05-31
  • 1970-01-01
  • 1970-01-01
  • 2017-04-20
  • 1970-01-01
  • 2019-09-26
  • 1970-01-01
  • 2016-01-09
相关资源
最近更新 更多