問題描述
我試圖透過郵寄元名稱,我新增了帖子。後期元是”_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 輔助翻譯的英文資料結果。如果您對結果不滿意,可以加入我們改善翻譯效果:薇曉朵技術論壇。
