使用ORDERBY和META_VALUE对自然/字母数字排序

时间:2018-05-16 作者:Cristian

我为自定义帖子类型添加了一个自定义列。然后我把它放在第三列,现在我想对它进行字母数字排序。我使用此操作: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;
      }

   }
}
但它不起作用。它总是会回报我:

enter image description here

但我先要CA3,CA5,然后是CA10。。。。我也试着用LENGTH()或类似的东西来施压,但没什么可做的。。

1 个回复
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/

结束

相关推荐

WooCommerce shop page orderby

最近我发现,WooCommerce被删除了Display WooCommerce管理设置中的选项。因此,我的店铺页面中当前显示的所有产品都是按升序排列的。但是,我想按降序显示它们。这意味着我希望始终保持以上新产品。现在我使用的是WooCommerce 3.3.5版本,主题名称是storefront。TIA公司