我有点问题.我试图通过自定义元字段获取最新的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' => '='
)
),
));
Run Code Online (Sandbox Code Playgroud)
根据 Codex,您只需用空格分隔它们:
多个“orderby”值
显示按“标题”和“菜单顺序”排序的页面。(标题占主导地位):
Run Code Online (Sandbox Code Playgroud)$query = new WP_Query( array( 'post_type' => 'page', 'orderby' => 'title menu_order', 'order' => 'ASC' ) );
在你的情况下,这看起来像:
'orderby' => 'meta_value_num date'
Run Code Online (Sandbox Code Playgroud)
编辑:好的,看来您正在尝试在这里做一些更复杂的事情。我的理解是这样的,如有错误请指正:
air_date(按降序排列,最新的在前)。air_date。date。所做orderby的基本上是:
air_date.air_date值,请按 排序date。不同之处在于您只想通过 来区分air_date,而 的正常用法orderby使用这两个条件来确定哪些项目最终出现在结果中。
但我不知道解决这个问题的简单方法。但是,由于您只想更改结果项目的显示顺序,因此您可以自己对它们进行排序。您可以使用 PHP 对结果数组进行get_posts排序WP_Queryusort
$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;
}
Run Code Online (Sandbox Code Playgroud)
小智 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',
),
Run Code Online (Sandbox Code Playgroud)