基于 WordPress 循环的关系子元素的 php 查询

问题描述 投票:0回答:1

我会尝试尽可能简单地解释这一点。

我有 3 种帖子类型在这里发挥作用。

  1. 报道
  2. 活动(motogp-2013、motogp-2014)
  3. 电路

在我的“事件”single.php 上显示事件信息,我正在尝试创建一个查询来显示相关的“报告”。

事件内容与报告的唯一关系就是电路。


当我创建“报告”时,我必须为其分配一个“事件”。但是,当我在报告之前创建“事件”时,我必须为其分配一个“电路”。

例如,看起来像这样...

> 'report' - Second place for Pedrosa as black flag terminates race for Marquez (1023)
   > 'event' - Australian Grand Prix (662)
      > 'circuit' - Phillip Island (156)

所以我试图查询“报告”,其中在特定“电路”上有“事件”。


在我的“事件”single.php 上,我确实有电路 ID,但我不知道如何列出该电路中的报告。

我可以使用此查询轻松显示相关“事件”

$related = new WP_Query(array(
    'post_type' => array('motogp-2013','motogp-2014'),
    'posts_per_page' => -1,
    'meta_query' => array(
        array(
            'key' => 'event_calendar_circuit',
            'value' => $circuit,
            'compare' => '=',
            'type' => 'NUMERIC'
        )
    )    
));

但这不是我想要达到的目的,我需要展示相关的报告。


这个

reports_race_event
元键包含“事件”的id号,“事件”包含元键
event_calendar_circuit
,其中包含电路id。

我的问题是,当我唯一的元密钥是

reports_race_event

时,如何为“报告”执行此操作

我需要列出我们在特定地点举行的“报告”

$circuit


如果有人可以帮助我,那就太好了。


我已经知道如何做到这一点了!

但是我仍然需要帮助,我可以像这样列出所有相关报告...

$related_reports = new WP_Query(array(
    'post_type' => 'reports',
    'posts_per_page' => -1,
    'meta_query' => array(
        array(
            'key' => 'reports_race_event',
            'value' => $events_at_circuit,
            'compare' => not sure,
            'type' => not sure
        )
    )    
));

但是我需要创建一个“事件”ID 号数组并将其存储在这个

$events_at_circuit
变量中。

首先使用此查询购买...

global $circuit;

$related_events = get_posts(array(
    'post_type' => array('motogp-2013','motogp-2014'),
    'posts_per_page' => -1,
    'meta_query' => array(
        array(
            'key' => 'event_calendar_circuit',
            'value' => $circuit,
            'compare' => '=',
            'type' => 'NUMERIC'
        )
    )    
));

我现在的问题是,如何从 $lated_events 查询中获取返回的帖子 ID 号并将它们作为数组存储在

$events_at_circuit

php wordpress custom-fields
1个回答
0
投票

我终于到了那里...

这就是答案,我必须存储该电路中事件的数组编号,然后使用数组变量通过 meta_key 值进行查询。然后使用wordpress meta IN进行比较。请参阅下面的完整代码...

$events_at_circuit = null;

$related_events = get_posts(array(
    'post_type' => array('motogp-2013','motogp-2014'),
    'posts_per_page' => -1,
    'meta_query' => array(
        array(
            'key' => 'event_calendar_circuit',
            'value' => $circuit,
            'compare' => '=',
            'type' => 'NUMERIC'
        )
    )    
));

if( !empty( $related_events ) ){ foreach( $related_events as $related_event ) $events_at_circuit[] =  $related_event->ID; }

$related_reports = new WP_Query(array(
    'post_type' => 'reports',
    'posts_per_page' => -1,
    'meta_query' => array(
        array(
            'key' => 'reports_race_event',
            'value' => $events_at_circuit,
            'compare' => 'IN',
            'type' => 'NUMERIC'
        )
    )    
));

if ( $related_reports->have_posts() ) :
© www.soinside.com 2019 - 2024. All rights reserved.