按照标题中的第一个字母而不是第一个数字对帖子进行排序

时间:2014-11-10 作者:user1676224

我有一个自定义的帖子类型,用于在客户端网站上显示属性。我正在按标题对帖子进行排序,但希望忽略该标题中包含的任何数字。

如何按第一个字母[A-Z]而不是[0-9,A-Z]对帖子进行排序?

这是我当前的循环:

<section id="grid" class="project clearfix">
    <div class="wrapper">
        <ul id="project" class="clearfix">
        <?php
        // select our project post types
        $wptricckspost = array( 
            \'post_type\' => \'project\',
            \'orderby\'   => \'title\', 
            \'order\'     => \'ASC\' 
        );
        // Create the new loop
        $loop = new WP_Query( $wptricckspost );
        while ( $loop->have_posts() ) : $loop->the_post(); ?>
            <li class="item">
                <header>
                    <h2><?php the_title(); ?></h2>
                </header>
                <article>
                    <?php the_content();
                    // Other HTML stuff below...

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

考虑到MySQL中缺少preg_replace - 以下使用嵌套REPLACE 要从标题中删除所有数字,请执行以下操作:

function wpse167989_posts_orderby( $orderby, $query ) {
    global $wpdb;
    // Strip all numbers from title, and trim any leading spaces.
    return $wpdb->prepare(
        \'LTRIM(\' . str_repeat( \'REPLACE(\', 10 ) . $wpdb->posts . \'.post_title\'
        . str_repeat( \', %s, %s)\', 10 ) . \') \' . $query->get( \'order\' )
        , 0, \'\', 1, \'\', 2, \'\', 3, \'\', 4, \'\', 5, \'\', 6, \'\', 7, \'\', 8, \'\', 9, \'\' );
}
那么

add_filter( \'posts_orderby\', \'wpse167989_posts_orderby\', 10, 2 );
$loop = new WP_Query( $args );
remove_filter( \'posts_orderby\', \'wpse167989_posts_orderby\', 10 );
按注释编辑:若要删除连字符,过滤器将变为

function wpse167989_posts_orderby( $orderby, $query ) {
    global $wpdb;
    // Strip all numbers & hyphens from title, and trim any leading spaces.
    return $wpdb->prepare(
        \'LTRIM(\' . str_repeat( \'REPLACE(\', 11 ) . $wpdb->posts . \'.post_title\'
        . str_repeat( \', %s, %s)\', 11 ) . \') \' . $query->get( \'order\' )
        , 0, \'\', 1, \'\', 2, \'\', 3, \'\', 4, \'\', 5, \'\', 6, \'\', 7, \'\', 8, \'\', 9, \'\', \'-\', \'\' );
}

结束

相关推荐

The Loop in Static Page

我对环路有一些问题。我以“Twenty14”主题为例。我正在使用基本循环创建2个php文件。一个是家。其中一个是名为示例页的模板页。php。两者都包含此代码;if( have_posts() ) : while( have_posts() ) : the_post(); the_content; endwhile; endif; 没什么特别的,唯一的区别是我在示例页面上有模板声明。php/** * Template Nam