按帖子的第一个内容字母排序

时间:2015-03-20 作者:Ivan Myshkin

问题标题完全反映了我的问题。我正在建立一个非营利的诗集,并希望按字母顺序排序。本机Wordpress排序在这种情况下不合适。必须按内容的第一个字母而不是标题对诗歌进行排序。

请原谅我英语不好。谢谢所有能帮助我的人。

1 个回复
SO网友:bonger

最简单的方法是添加一个过滤器(在主题的“functions.php”中)按内容排序:

function wpse181797_posts_orderby( $orderby, $query ) {
    if ( ! is_admin() && $query->get( \'post_type\' ) == \'post\' /* && some other conditions probably... */ ) {
        global $wpdb;
        $pc = \'LTRIM(\' . $wpdb->posts . \'.post_content)\';
        $orderby = \'UPPER(\' . $pc . \') ASC\';
    }
    return $orderby;
}
add_filter( \'posts_orderby\', \'wpse181797_posts_orderby\', 10, 2 );
然而,这不会处理任何初始标点符号或HTML标记或诗句编号/标题/题词或其他任何内容,因此对于这些情况,您可能最好也使用辅助字段,例如post_excerpt 如果可用,则在例外情况下,将第一行按需要排序,因此过滤器变为:

function wpse181797_posts_orderby_excerpt( $orderby, $query ) {
    if ( ! is_admin() && $query->get( \'post_type\' ) == \'post\' /* && some other conditions probably... */ ) {
        global $wpdb;
        $pc = \'LTRIM(CONCAT(\' . $wpdb->posts . \'.post_excerpt, \' . $wpdb->posts . \'.post_content))\';
        $orderby = \'UPPER(\' . $pc . \') ASC\';
    }
    return $orderby;
}
add_filter( \'posts_orderby\', \'wpse181797_posts_orderby_excerpt\', 10, 2 );
如果您使用post_excerpt 出于其他目的,您可以使用自定义字段,例如\'first_line_sort\', 然后打开过滤器posts_clauses (要添加联接):

function wpse181797_posts_clauses( $pieces, $query ) {
    if ( ! is_admin() && $query->get( \'post_type\' ) == \'post\' /* && some other conditions probably... */ ) {
        global $wpdb;
        $pieces[ \'join\' ] .= $wpdb->prepare(
            \' LEFT JOIN \' . $wpdb->postmeta . \' wpse_pm ON wpse_pm.post_id = \' . $wpdb->posts . \'.ID\'
            . \' AND wpse_pm.meta_key = %s\'
            , \'first_line_sort\'
        );
        $pieces[ \'orderby\' ] = \'UPPER(LTRIM(IFNULL(wpse_pm.meta_value, \' . $wpdb->posts . \'.post_content))) ASC\';
    }
    return $pieces;
}
add_filter( \'posts_clauses\', \'wpse181797_posts_clauses\', 10, 2 );

结束

相关推荐

How do i Sort my Posts

我寻找一种解决方案,如何在我的页面中对文章进行排序。我在谷歌上搜索了几个小时,尝试了很多东西,但都不管用:(。不管怎样,也许有人能给我一个好的建议。我想要一个简单的列表,其中包含排序选项,如“最新优先”或“相关性”或“字母顺序(条目标题)”。有什么想法吗?