我有一点问题。我试图通过自定义元字段获取最新的12个帖子。在这12个帖子中,我想按照发布日期订购。首先,我使用自定义元字段将12个帖子拉出来,并命令他们通过元字段查找最新信息。一旦我拥有它们,那么我想用最新的帖子重新订购它们。
这是我当前的代码,我不知道如何在一个查询中放置两个order-bys ...
$recentEpisodes12 = new WP_Query(array(
'posts_per_page' => 12,
'post_type' => 'post',
'meta_key' => 'air_date',
'order' => 'DESC',
'orderby' => 'meta_value_num',
'meta_query' => array(
array(
'key' => 'air_date',
),
array(
'key' => 'already_aired',
'value' => 'yes',
'compare' => '='
)
),
));
答案 0 :(得分:5)
在WordPress 4.2及更高版本中,按一个或多个自定义字段排序变得更加容易。请参阅此链接以获取示例:https://make.wordpress.org/core/2015/03/30/query-improvements-in-wp-4-2-orderby-and-meta_query/
您甚至可以通过将数组传递给orderby来订购一个列ASC和另一个DESC:
'orderby' => array(
'city_clause' => 'ASC',
'state_clause' => 'DESC',
),
答案 1 :(得分:4)
According to the Codex,您只需要用空格分隔它们:
多个'orderby'值
显示按'title'和'menu_order'排序的页面。 (标题是 显性):
$query = new WP_Query( array( 'post_type' => 'page', 'orderby' => 'title menu_order', 'order' => 'ASC' ) );
在您的情况下,这将是:
'orderby' => 'meta_value_num date'
编辑:好吧,好像你正试图在这里做一些更复杂的事情。这就是我解释它的方法,如果我错了,请纠正我:
air_date
排序(按降序排列,最新排名第一)。air_date
date
订购生成的12个项目。 orderby
基本上做了什么:
air_date
订购。air_date
值,请按date
订购。{/ li>
区别在于您只想区分 air_date
,而orderby
的正常用法使用两个条件来确定哪些项目最终会出现在结果中。< / p>
但是,我不知道解决这个问题的简单方法。但是,由于您只想更改结果项的显示顺序,您可以自己对它们进行排序。您可以使用get_posts
代替WP_Query
,并使用PHP的usort
$posts = get_posts(...);
usort($posts, '__sort_by_date_desc');
function __sort_by_date_desc($a, $b) {
// Make timestamps from MySQL datetime values
$a_date = mysql2date('U', $a->post_date);
$b_date = mysql2date('U', $b->post_date);
// Descending order, swap these for ascending
return $b_date - $a_date;
}
答案 2 :(得分:0)
因此,如果您想通过发布日期订购它们,为什么还需要一个元字段呢?按meta值获得12条最新帖子后,air_date
与发布日期有何不同?
值得注意的是:posts_per_page
并不限制总回报数。它只是告诉WordPress何时拆分成新页面。
这样的事情应该基于你在原帖中描述的内容。
// Post Criteria
$post_criteria = array(
'posts_per_page' => 12, // Don't paginate until after 12 posts
'orderby' => 'post_date', // Order by post date
'order' => 'DESC', // Order them reverse chronologically (ie. get the newest first)
'meta_key' => 'air_date', // Only get posts with this meta key
'meta_value' => 'meta_value_num', // And this meta value (only needed if you have multiple possible values for the meta key and just want one)
'post_type' => 'post', // Only get posts
'post_status' => 'publish'); // Only get posts that are published (ie. no drafts, etc.)
// Get posts matching criteria
$posts = get_posts( $post_criteria );
// Discard posts after the 12th one
$posts = array_slice($posts, 0, 12);
// If you wanted to reverse them to display
// chronologically, uncomment this variable.
# $posts = array_reverse($posts);
// For each post
foreach ($posts as $post) {
// Basic variables
// See a full list here: http://codex.wordpress.org/Function_Reference/get_post#Return
$id = $post->ID;
$title = $post->post_title;
$url = get_permalink($id);
$content = $post->post_content;
// Do stuff with the posts here.
}