我有一个查询,在这里我首先检查所有具有meta_key topbox
(具有特色的帖子)的帖子。之后,我要检查他们在meta_key topbopx_order
中设置了哪些自定义顺序。
到目前为止,它工作正常,除非两个帖子具有相同的订单值,否则它的行为会始料不及。在我看来,它根本没有考虑日期,因为我在该行中还有更多的帖子,这些帖子的更新发布日期和顺序设置为1,但它们不会显示。
这是我到目前为止的查询
$feat_args = array(
'posts_per_page' => 5,
'post_status' => 'publish',
'meta_key' => 'topbox_order',
'meta_query' => array(
'relation' => 'AND',
array(
'key' => 'asb_topbox',
'value' => 'yes',
'compare' => '='
),
array(
'key' => 'topbox_order',
'value' => array(1, 2, 3, 4, 5),
'compare' => 'IN'
)
),
'orderby' => array (
'meta_value_num' => 'ASC',
'date' => 'DESC'
),
'ignore_sticky_posts' => true,
'no_found_rows' => true,
);
$feat = new WP_Query( $feat_args );
另外,我将所有帖子的topbox_order
默认设置为值1。
修改
我现在知道,我可能正在尝试实现一些不可能的事情。我想将订单设置为发布,但同时,我希望它们被具有相同或更高订单号的新发布下推。 compare
的组合是否允许这种行为?
答案 0 :(得分:0)
解决方案太复杂了,似乎太复杂了。经过与客户的讨论,我们决定走另一条路-仅控制该行中的第一条帖子。
这就是我最终得到的结果-我打电话给两组帖子,在它们到达主wp_query并显示之前对其进行排序。
// first query
$first_ids = get_posts( array(
'fields' => 'ids',
'posts_per_page' => '1',
'post_status' => 'publish',
'orderby' => 'date',
'meta_key' => 'asb_topbox',
'meta_query' => array(
'relation' => 'AND',
array(
'key' => 'asb_topbox',
'value' => 'yes',
'compare' => '='
),
array(
'key' => 'topbox_ofset',
'value' => 'no',
'compare' => '='
)
)
));
// second query
$second_ids = get_posts( array(
'fields' => 'ids',
'posts_per_page' => '5', // because one can be the same as first
'post_status' => 'publish',
'orderby' => 'date',
'meta_key' => 'asb_topbox',
'meta_query' => array(
'relation' => 'AND',
array(
'key' => 'asb_topbox',
'value' => 'yes',
'compare' => '='
),
array(
'relation' => 'OR',
array(
'key' => 'topbox_ofset',
'compare' => 'EXISTS'
),
array(
'key' => 'topbox_ofset',
'compare' => 'NOT EXISTS'
)
)
)
));
// Remove duplicates
$mergedposts = array_unique( array_merge( $first_ids, $second_ids));
$feat_args = array(
'posts_per_page' => 5,
'post_status' => 'publish',
'post__in' => $mergedposts,
'orderby' => 'post__in',
'ignore_sticky_posts' => true,
'no_found_rows' => true
);
原则上,您可以将帖子设置为跳到第二位置。不,我不想为此使用粘性,因为随着时间的流逝,我到处都会有粘性帖子,也不想记住,我必须使它们变得不粘性。我的解决方案使日期保持顺畅,我可以将第一篇文章保留更长的时间,而不会影响其余的档案。