无法解决此问题。
目标:我想显示所有帖子并按照帖子后排序 value ,但并非所有帖子都有该键。
问题:并非所有帖子都显示,只显示具有该元组的帖子(以及元值)。
$args = array(
'post_type' => 'post',
'meta_key' => 'post_custom_field_1',
'orderby' => 'meta_value',
'order' => 'ASC',
'paged' => $paged,'post_type' => 'post' );
问题:如何显示所有帖子并按meta_key对其进行排序?具有meta_key的帖子首先显示,并按名称排序,并且不会跟随meta_key并按标题排序。
答案 0 :(得分:0)
您必须使用EXISTS进行比较。有很多例子in the docs for WP_Query,您可以根据自己的情况进行调整:
function orderby_fieldifexists($orderby) {
return "mt1.post_id IS NOT NULL DESC, wp_postmeta.meta_value ASC";
}
add_filter("posts_orderby", "orderby_fieldifexists", 10, 1);
$query = new WP_Query(
array(
'post_type' => 'post',
'meta_query' => array(
"relation" => "or",
'custom_field_value' => array(
'key' => 'post_custom_field_1',
),
'custom_field' => array(
'key' => 'post_custom_field_1',
'compare' => 'NOT EXISTS',
),
),
'orderby' => array(
'custom_field' => 'ASC'
),
'posts_per_page' => 5,
)
);
我最初在这里有一个更简单的版本,但后来记得如果某些值为NULL,用数字排序将是愚蠢的。此版本将查找所有帖子,但也会获取值,并按“存在吗?”进行降序排序。然后按实际值升序,因此自定义字段值为-1的帖子将列在没有该自定义字段值的帖子之前。