问题描述
我试图通过邮寄元名称,我添加了帖子。后期元是”_merchant_id” 我知道如何排序 merchan_id 但我不知道如何按商家名称排序。
我按照这样的商家 ID 排序:
public function column_orderby( $vars ) {
if ( isset( $vars['orderby'] ) && is_admin() ) {
switch ( $vars['orderby'] ) {
case 'merchant':
$vars = array_merge( $vars, array(
'meta_key' => '_merchant_id',
'orderby' => 'meta_value_num'
) );
break;
...
商家是另一种职位类型 (“merchant”) 。如何按商家名称排序?
UPDATE(通过截图改进解释):
最佳解决方案
我希望我的解决方案对某人有用。
public function column_orderby( $vars ) {
if ( isset( $vars['orderby'] ) && is_admin() ) {
switch ( $vars['orderby'] ) {
...
case 'merchant':
GLOBAL $wpdb, $query;
$vars = array_merge(
$vars, array(
'meta_key' => '_merchant_id',
'orderby' => 'meta_value_num'
)
);
add_filter('posts_clauses', 'e_order_by_mechant_name',10,2);
break;
...
}
return $vars;
}
function e_order_by_mechant_name( $clauses, $query ) {
global $wpdb;
if ( ! $query->is_main_query()
|| ! is_admin()
){
return $clauses;
}
//Get sort order
$order_dir = $query->get('order');
$order_dir = ('asc' == $order_dir ? 'ASC' : 'DESC');
//Join user table onto the postmeta table
$clauses['join'] .= " LEFT JOIN {$wpdb->prefix}posts merchants ON {$wpdb->prefix}postmeta.meta_value = merchants.ID";
//Replace orderby
$clauses['orderby'] = " merchants.post_title $order_dir";
return $clauses;
}
参考文献
注:本文内容整合自 Google/Baidu/Bing 辅助翻译的英文资料结果。如果您对结果不满意,可以加入我们改善翻译效果:薇晓朵技术论坛。