我正在使用这里描述的技术Seperating Custom Post Search Results 还有这里posts_groupby problem 将我的搜索结果分开并按帖子类型分组。这意味着我有以下代码。
In functions.php
add_filter(\'posts_orderby\', \'group_by_post_type\', 10, 2);
function group_by_post_type($orderby, $query) {
global $wpdb;
if ($query->is_search) {
return $wpdb->posts . \'.post_type DESC\';
}
// provide a default fallback return if the above condition is not true
return $orderby;
}
In search.php
<?php $last_type="";
$typecount = 0;
while (have_posts()){
the_post();
if ($last_type != $post->post_type){
$typecount = $typecount + 1;
if ($typecount > 1){
echo \'</ol>\'; //close type container
}
// save the post type.
$last_type = $post->post_type;
//open type container
switch ($post->post_type) {
case \'post\':
echo "<h2>News Articles</h2><ol>";
break;
case \'page\':
echo "<h2>Pages</h2><ol>";
break;
case \'work\':
echo "<h2>Projects</h2><ol>";
break;
case \'bootlegs\':
echo "<h2>Bootlegs</h2><ol>";
break;
case \'directors\':
echo "<h2>Directors</h2><ol>";
break;
//add as many as you need.
}
} ?>
除了我无法控制自定义帖子类型的显示顺序之外,这一切都非常有效。我猜它们是通过内部ID号订购的,但我需要控制它们。
我怎样才能做到这一点?
谢谢
最合适的回答,由SO网友:montrealist 整理而成
你到底想要什么样的控制?例如,有一些插件提供了一个UI,您可以通过它按各种参数排序帖子。
如果您只想按一个不会更改的参数对它们进行排序,只需将其添加到查询中即可(因为you can order by multiple conditions):
if ($query->is_search) {
return $wpdb->posts . \'.post_type DESC, title DESC\';
}
Edit: 这是
another question 你可能会觉得有用。