最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

functions - sort title descending with title with number

programmeradmin1浏览0评论

please help me,
i have title like this
'1-nen A-gumi no Monster Chapter 2'
'1-nen A-gumi no Monster Chapter 10'
'1-nen A-gumi no Monster Chapter 2'
'1-nen A-gumi no Monster Chapter 1'
'1-nen A-gumi no Monster Chapter 30'
'1-nen A-gumi no Monster Chapter 3'

i want to sort like this
'1-nen A-gumi no Monster Chapter 1'
'1-nen A-gumi no Monster Chapter 2'
'1-nen A-gumi no Monster Chapter 3'
'1-nen A-gumi no Monster Chapter 10'
'1-nen A-gumi no Monster Chapter 20'
'1-nen A-gumi no Monster Chapter 30'

but the result like this
'1-nen A-gumi no Monster Chapter 1'
'1-nen A-gumi no Monster Chapter 10'
'1-nen A-gumi no Monster Chapter 2'
'1-nen A-gumi no Monster Chapter 20'
'1-nen A-gumi no Monster Chapter 3'
'1-nen A-gumi no Monster Chapter 30'

this my function :

add_filter( 'posts_clauses', function ( $pieces, $query ) {
    if ( $query->get( 'orderby' ) != 'title_number' ) return $pieces;
    global $wpdb;
    $field = $wpdb->posts . '.post_title';
    $pieces[ 'fields' ] .= $wpdb->prepare(
        ', LEAST(' . implode( ',', array_fill( 0, 10, 'IFNULL(NULLIF(LOCATE(%s, ' . $field . '), 0), ~0)' ) )
        . ') AS first_int',
        '0', '1', '2', '3', '4', '5', '6', '7', '8', '9'
    );
    $pieces[ 'orderby' ] = $wpdb->prepare(
        'IF(first_int = ~0, ' . $field . ', CONCAT('
            . 'SUBSTR(' . $field . ', 1, first_int - 1),'
            . 'LPAD(CAST(SUBSTR(' . $field . ', first_int) AS UNSIGNED), LENGTH(~0), %s),'
            . 'SUBSTR(' . $field . ', first_int + LENGTH(CAST(SUBSTR(' . $field . ', first_int) AS UNSIGNED)))'
        . ')) ' . $query->get( 'order' )
        , 0
    );
    return $pieces;
}, 10, 2 );

but if the first character of title is letter the sort is normal.

please help thank you

发布评论

评论列表(0)

  1. 暂无评论