如何对独立的自定义帖子搜索结果进行排序

时间:2013-04-05 作者:Jacob

我正在使用这里描述的技术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号订购的,但我需要控制它们。

我怎样才能做到这一点?

谢谢

2 个回复
最合适的回答,由SO网友:montrealist 整理而成

你到底想要什么样的控制?例如,有一些插件提供了一个UI,您可以通过它按各种参数排序帖子。

如果您只想按一个不会更改的参数对它们进行排序,只需将其添加到查询中即可(因为you can order by multiple conditions):

if ($query->is_search) {
    return $wpdb->posts . \'.post_type DESC, title DESC\';
}
Edit: 这是another question 你可能会觉得有用。

SO网友:Ricardo Gerstl

在这种情况下,回退(次要)顺序是标题。

在里面functions.php:

add_filter( \'pre_get_posts\', \'ordering_post_title_type\');
function ordering_post_title( $query ) {

    if ( $query->is_search ) {
        $query->set(\'orderby\',\'type title\');
        $query->set(\'order\',\'ASC\');
    }

    return $query;

}

结束

相关推荐

Search posts by Tag

我希望我的搜索表单只显示按标记组织的结果。我知道你可以添加&tag=TAGNAME 但如何将其集成到表单中,以便我的网站只搜索包含与搜索框中输入的内容相同的标记的帖子?我在页面上有两个搜索,因此理想情况下,我希望能够通过HTML将其添加到表单中,而不是其他任何地方,但任何答案都可以:)谢谢