问题描述

我试图通过邮寄元名称,我添加了帖子。后期元是”_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 辅助翻译的英文资料结果。如果您对结果不满意,可以加入我们改善翻译效果:薇晓朵技术论坛。