我为自定义帖子类型添加了一个自定义列。然后我把它放在第三列,现在我想对它进行字母数字排序。我使用此操作:add_action( \'pre_get_posts\', \'manage_wp_posts_be_qe_pre_get_posts\', 1 );
我写下这个函数:
function manage_wp_posts_be_qe_pre_get_posts( $query ) {
if ( $query->is_main_query() && ( $orderby = $query->get( \'orderby\' ) ) ) {
switch( $orderby ) {
case \'Rif\':
$query->set( \'meta_key\', \'riferimento\' );
$query->set( \'orderby\', \'meta_value meta_value_num\');
break;
}
}
}
但它不起作用。它总是会回报我:
但我先要CA3,CA5,然后是CA10。。。。我也试着用LENGTH()或类似的东西来施压,但没什么可做的。。
SO网友:SeventhSteel
orderby参数受到MySQL中可能存在的限制,并且它不擅长您描述的自然字母数字排序。可能的选项包括:
用前导零重写值,例如“CA05”,创建一个单独的“排序顺序”列,只存储一个整数,并按该列排序将字母和数字分隔为两个单独的字段。然后编写一个更复杂的查询,按两个不同的元数据排序:
$query->set( \'meta_query\', array(
\'relation\' => \'AND\',
\'letter_clause\' => array(
\'key\' => \'letter\',
),
\'number_clause\' => array(
\'key\' => \'number\',
\'type\' => \'NUMERIC\'
)
);
$query->set( \'orderby\', array(
\'letter_clause\' => \'ASC\',
\'number_clause\' => \'ASC\'
);
有关该语法的更多信息,请单击此处:
https://www.billerickson.net/wp-query-sort-by-meta/