wordpress - 如何在多数组元键查询中组合排序
问题描述
我有一个查询,我首先检查所有具有 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
允许这种行为的组合?
解决方案
解决方案超出了我的想象,似乎太复杂了。在与客户交谈后,我们决定采用不同的方法 - 仅控制该行中的第一个帖子。
这是我最终得到的结果-我正在调用两组帖子,在它们到达主 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
);
原则上,您可以将帖子设置为跳到第二个位置。不,我不想为此使用粘性,因为随着时间的推移,我会在整个地方都有粘性帖子并且不想记住,我必须让它们不粘。我的解决方案保持了日期流,我可以在不影响其余档案的情况下保留第一个帖子更长的时间。
推荐阅读
- javascript - 递归地从对象中删除编号的键
- r - 如果它与向量中的项目匹配,则替换整个数据框中的所有值
- springdoc - 使用 GroupedOpenApi bean 时未在 Swagger-UI 中添加 Springdoc-openapi 全局标头
- r - 在 CVXR 中,如何使用外部 c++ 函数?
- mysql - 使用python将数据插入mysql时出错
- c# - 在移动的同时跳跃时跳跃没有那么高
- ios - Google Mobile Ads v8 - 您如何确定哪个插页式广告被忽略了?
- php - Payee Poprety PayPal Checkout V2 的问题
- cmake - 我只能用 make 构建一次
- swift - SwiftUI Mac:辅助窗口中的环境对象