【发布时间】:2017-01-15 13:43:27
【问题描述】:
我已经尝试和研究了几个小时,试图找到一种方法来让它发挥作用,但我只是没有任何运气。
所以我有几个不同的自定义帖子类型需要混合一下。让我尝试尽可能清晰和经济地解释它。
有 2 种自定义帖子类型,消息和校园。 (这是一个大型的多校区教会网站)。每个消息帖子都会有一些基于 Campuses 的转发器行(通过分类字段),每个 Campus 帖子都将尝试获取最新的消息帖子,并拉取特定的“校园”转发器行,以及该行中的相同字段值.
消息单个帖子的 ACF 转发器部分...(我们选择其中一个 Campus 帖子,然后手动输入发言人姓名和消息 URL)
所以目前,我在一个“校园”单一帖子中,试图查询并获取最新的消息帖子,该帖子正在运行。但后来我试图定位并仅提取消息帖子内部特定中继器行的值。消息中的转发器字段是 Campus Select(基于 Post Object 字段的选择框(在“campus”帖子类型上)和 2 个不同的文本字段。
为了进一步说明...消息帖子具有以下转发器数据: 中继器第 1 行:校园选择 - Troy(帖子),消息扬声器 - Danny Cox,消息 URL -(url A) 中继器第 2 行:校园选择 - 伯明翰(帖子),消息发言人 - Cliff Johnson,消息 URL -(URL B) ...并且多个校区将有动态数量的中继器。
所以我想要做的事情如下......在我的校园帖子中 - 例如“特洛伊” - 我想获取最新的消息帖子,进入转发器并找到带有“校园”的行选择”值。我想仅从该行返回消息扬声器 (Danny Cox) 和消息 URL (url A)。我不需要其他行的任何东西。
我当前的“最新消息”中有 2 个转发器行,这是我当前的查询:
<?php
$args = array(
'post_type' => 'messages',
'posts_per_page' => 1
);
$latestMessageQuery = new WP_Query($args);
if( $latestMessageQuery->have_posts() ) { ?>
<?php while ($latestMessageQuery->have_posts()) : $latestMessageQuery->the_post(); ?>
<?php if( have_rows('campus_message') ): ?>
<?php while( have_rows('campus_message') ): the_row(); ?>
<?php if( get_sub_field('campus_selector') == 'troy' ): ?>
<?php the_sub_field('message_speaker'); ?>
<?php else: ?>
<?php the_sub_field('message_speaker'); ?>
<?php endif; ?>
<?php endwhile; ?>
<?php endif; ?>
<?php endwhile; ?>
<?php }
wp_reset_query();
?>
为了进行故障排除,我正在手动尝试获取“特洛伊”值“校园选择器”,而不是根据我当前的“校园”位置动态获取该值......
查询同时返回:“Cliff Johnson Danny Cox”(因为我有 2 个中继器行)。
如何在我的查询中仅返回:“Troy, Danny Cox, url A”?
【问题讨论】:
-
鉴于我担心的数据之间的关系,设置存在问题。在您的示例中已经说过,您将在运行此查询之前获取校园的帖子名称,然后将
. . . == 'troy'替换为该帖子名称。最后删除产生相同输出的相应else。但是,我会考虑几个替代方案。 1) 考虑不同的结构或 2) 使用自定义数据库查询 (codex.wordpress.org/Class_Reference/wpdb) -
嗨,Nathan,感谢您的回复...如上所示:“用于故障排除...”我可以动态获取帖子名称并将其拉入“... == 'troy'”少量。我可以解决那部分。我认为我无法更改结构,因为这已经是一个相当大的站点,并且为每个不同的校园提供一个 ACF 中继器的单个“消息”帖子似乎是更合乎逻辑的解决方案。 . 而不是每个校区都有 7 个不同的“信息”帖子。
-
根据您的其他建议,对于我的技能水平,自定义数据库查询看起来非常复杂。你能举例说明这对我的情况有什么作用吗?
标签: wordpress custom-post-type advanced-custom-fields