如果我有自定义帖子类型(post_type
),并且我想保证帖子类型为product
的任何内容出现在搜索结果中的任何其他内容之前,我该如何实现?最好只改变查询的order by
部分。
目前我有:
ORDER BY posts.post_type DESC, posts.post_date DESC
这是有效的,但testimonial
上的product
的另一个帖子类型在DESC
之前。在ASC
上,articles
之前有一个不同的自定义帖子类型product
,但我需要先product
(以post_date
排序),然后其他所有内容 - 也是post_date
订购的。
完整代码:
add_filter('posts_orderby','search_sort_custom',10,2);
function search_sort_custom( $orderby, $query )
{
global $wpdb;
if(!is_admin() && is_search()) {
$orderby = $wpdb->prefix."posts.post_type DESC, {$wpdb->prefix}posts.post_date DESC";
}
return $orderby;
}
答案 0 :(得分:1)
您可以在ORDER BY
子句中使用表达式:
ORDER BY posts.post_type='product' DESC,
posts.post_type DESC,
posts.post_date DESC
如果您有更多要求,可以这样做:
ORDER BY posts.post_type='product' DESC,
posts.post_type='testimonial' DESC,
posts.post_type DESC,
posts.post_date DESC
或使用FIND_IN_SET
:
ORDER BY FIND_IN_SET(posts.post_type,'product, testimonial'),
posts.post_type DESC,
posts.post_date DESC
但理想情况下,我会将产品类型转移到另一个表格,并为每个类型提供一个优先级整数。这样您就可以完全控制订单而不会出现这样的剧情!
答案 1 :(得分:0)
你可以简单地做到
ORDER BY (
posts.post_type = 'product' DESC,
posts.post_type DESC,
posts.post_date DESC
)