2016-08-02 8 views
10

मैं एक कस्टम पोस्ट संपर्क कहा जाता है प्रकार, पहले नाम, उपनाम, टेलीफोन नंबर आदिWordpress: कस्टम पोस्ट प्रकार

व्यवस्थापक अनुभाग में की तरह कस्टम क्षेत्रों के साथ वे कालक्रम के अनुसार मुझे लगता है कि हल कर रहे हैं के कॉलम के आधार पर डिफ़ॉल्ट छंटाई , लेकिन मुझे डिफ़ॉल्ट रूप से उपनाम द्वारा क्रमबद्ध करने की आवश्यकता है।

मैं यहाँ पर सभी अन्य समाधान पढ़ चुके हैं और उनमें से कोई भी काम करते हैं, जिनमें शामिल हैं:

function set_post_order_in_admin($wp_query) { 
global $pagenow; 
    if (is_admin() && 'edit.php' == $pagenow && !isset($_GET['orderby'])) { 
    $wp_query->set('orderby', 'surname'); 
    $wp_query->set('order', 'ASC'); 
    } 
} 
add_filter('pre_get_posts', 'set_post_order_in_admin'); 

लेकिन जो कुछ भी क्षेत्र मैं, कुछ भी नहीं बदलता है, से सॉर्ट करने के एएससी टॉगल को छोड़कर कोशिश/DESC करने के लिए बदल रहा है क्रोनोलॉजिकल ऑर्डरिंग रिवर्स।

मैं क्या गलत कर रहा हूं?

+0

यही बात के साथ-साथ मेरे लिए हो रहा है। – Junaid

+0

आपकी शर्तें गलत हैं। सबसे पहले ifs को हटाने के बाद ऐसा करने का प्रयास करें। – shazyriver

उत्तर

3

बदलें

$wp_query->set('orderby', 'surname'); 
$wp_query->set('order', 'ASC'); 

साथ

$query->set('meta_key', 'surname'); // name of your post meta key 
$query->set('orderby', 'meta_value'); // meta_value since it is a string 

यह मदद मिल सकती है

+0

पहले से ही यह कोशिश की है। काम नहीं करता – Junaid

+1

@ जुनाद https://wordpress.stackexchange.com/questions/194572/how-do-i-set-the-default-admin-sort-order-for-a-custom-post-type-to पर एक नज़र डालें -ए-कस्टम-कोल – Sanjay

+0

पहले से ही उस समाधान में निर्देशों का पालन करें। – Junaid

5

समाधान नीचे देखें,

function wpa84258_admin_posts_sort_last_name($query){ 
    global $pagenow; 
    if(is_admin() 
     && 'edit.php' == $pagenow 
     && !isset($_GET['orderby']) 
     && !isset($_GET['post_type'])){ 
      $query->set('meta_key', 'last_name'); 
      $query->set('orderby', 'meta_value'); 
      $query->set('order', 'ASC'); 
    } 
} 
add_action('pre_get_posts', 'wpa84258_admin_posts_sort_last_name'); 

या इस solution

01 उल्लेख
+0

यह काम किया। मैंने इससे पहले याद किया लेकिन भगवान का शुक्रिया मैंने कोशिश की। – Junaid

0

मैं एक ड्रूपल डेवलपर हूं और मुझे वर्डप्रेस के साथ खेलने का मौका नहीं मिला है। हमें एक ही समस्या थी और इस तरह हमने इसे ठीक किया।

अपनी कस्टम सामग्री प्रकार डेटा (या तो WP डिफ़ॉल्ट एपीआई या कस्टम क्वेरी) प्राप्त करें, यह ऑब्जेक्ट्स की एक सरणी होगी। नीचे दिए गए फ़ंक्शन का उपयोग करके उन्हें सॉर्ट करें। पदों की क्रमबद्ध सरणी वापस करें। निश्चित नहीं है, किस हुक में आपको इसे WordPress में लागू करने की आवश्यकता है।

/** 
* Function to sort array by key 
* sortArrayByKey($yourArray,"name",true); //String sort (ascending order) 
* sortArrayByKey($yourArray,"name",true,false); //String sort (descending order) 
* sortArrayByKey($yourArray,"id"); //number sort (ascending order) 
* sortArrayByKey($yourArray,"count",false,false); //number sort (descending order) 
*/ 

function sortArrayByKey(&$array, $key, $string = false, $asc = true) 
{ 
    if ($string) { 
     usort($array, function ($a, $b) use (&$key, &$asc) { 
      if ($asc) return strcmp(strtolower($a{$key}), strtolower($b{$key})); 
      else  return strcmp(strtolower($b{$key}), strtolower($a{$key})); 
     }); 
    } else { 
     usort($array, function ($a, $b) use (&$key, &$asc) { 
      if ($a[$key] == $b{$key}) { 
       return 0; 
      } 
      if ($asc) return ($a{$key} < $b{$key}) ? -1 : 1; 
      else  return ($a{$key} > $b{$key}) ? -1 : 1; 

     }); 
    } 
} 

और फिर अपने हुक में, आप द्वारा

return $this->sortArrayByKey($posts, "surname"); 

समारोह इस जवाब से नकल इस समारोह कॉल कर सकते हैं: https://stackoverflow.com/a/39872303/3086531

+0

यह एक समाधान है लेकिन एक आदर्श नहीं है। शून्य प्रदर्शन – Junaid

संबंधित मुद्दे