由于新闻没有自定义字段,因此您可能会更幸运:
$args = array(
\'post_type\' => array( \'news\', \'events\' ),
\'orderby\' => \'end-date date\',
\'meta_query\' => array(
\'relation\' => \'OR\',
array(
\'key\' => \'end-date\',
\'value\' => date ( \'Ymd\' ),
\'type\' => \'NUMERIC\',
\'compare\' => \'>=\'
),
array(
\'key\' => \'end-date\',
\'compare\' => \'NOT EXISTS\'
)
)
);
与ItaliantSoda的回答类似,“OR”关系将查找满足任一元查询的任何结果,第一个是特定于使用结束日期元字段的事件的帖子类型,另一个将很高兴地在该元字段不存在的任何新闻帖子类型中找到。
此外,我发现"meta_key" => "end-date" 在$args的顶级数组中,还排除了news-post类型。使用时,我无法判断结果的顺序是否正确,这是有效的还是巧合"orderby" => "end-date date", 从本质上讲,首先通过“结束日期”元字段设置结果排序的首选项,然后是帖子的发布日期。但它并没有破坏或排除结果。
或者,您可以执行“多个循环”以进行特定的控制。虽然这不是我最喜欢的方法,但它很有效,可以让您更好地控制特定帖子类型的参数。
第一个循环是获取所有的新闻帖子,并将它们作为帖子ID数组返回。它们是如何排序的在这里并不重要。
$news_ids = get_posts( array(
\'fields\' => \'ids\',
\'posts_per_page\' => -1,
\'post_type\' => \'news\',
\'post_status\' => \'publish\',
//Add any additional parameters specific to news here
));//Returns an array of IDs
第二个循环是获取所有的事件帖子,并将它们作为帖子ID数组返回。它们的排序方式在这里也无关紧要。
$events_ids = get_posts( array(
\'fields\' => \'ids\',
\'posts_per_page\' => -1,
\'post_type\' => \'events\',
\'post_status\' => \'publish\',
\'meta_query\' => array( array(
\'type\' => \'NUMERIC\',
\'key\' => \'end-date\',
\'value\' => date( \'Ymd\' ),
\'compare\' => \'>=\'
) ),
//Add any additional parameters specific to events here
));//Returns an array of IDs
使用这两个数组,可以将它们合并到帖子ID的“主列表”中,然后用作
post__in 在$args数组中。身份证的顺序在这里仍然无关紧要。
$all_ids = array_merge( $news_ids, $event_ids );//Combine all of the post IDs together into one array
$args = array(
\'post_type\' => array( \'news\', \'events\' ),//Specify both post types here still
\'post__in\' => $all_ids,//Only display posts from the "master list" of IDs
//Add any additional parameters for sorting all of them here like...
\'orderby\' => \'end-date date\',
\'order\' => \'ASC\'
);
在$args数组中定义顺序和排序时,它们将应用于最后一个和第三个“循环”。