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