तो यह सिर्फ इतना होता है कि मुझे एक प्रोजेक्ट के लिए कुछ ऐसा चाहिए था, जिस पर मैं काम कर रहा हूं। मैंने केवल एक कस्टम प्रकार के सभी पदों का चयन करने के लिए एक क्वेरी लिखी है, फिर मैं जांचता हूं कि वे मेरे वर्गीकरण की वास्तविक शर्तें क्या हैं जो वे उपयोग कर रहे हैं।
तब मुझे उस टैक्सोनॉमी का उपयोग करने की सभी शर्तें मिलीं get_terms()
और फिर मैंने केवल उन दोनों का उपयोग किया जो दोनों सूचियों में थे, इसे एक फ़ंक्शन में लपेट दिया और मुझे किया गया था।
लेकिन तब मुझे और अधिक की आवश्यकता थी, बस आईडी की: मुझे नामों की आवश्यकता थी इसलिए मैंने एक नया तर्क जोड़ा, $fields
इसलिए मैं फ़ंक्शन को बता सकता हूं कि क्या लौटना है। तब मुझे लगा कि get_terms
कई तर्क स्वीकार करते हैं और मेरा कार्य केवल शब्दों तक सीमित था, जो एक पोस्ट प्रकार द्वारा उपयोग किए जा रहे हैं इसलिए मैंने एक और जोड़ाif
बयान और वहां आप जाते हैं:
कार्यक्रम:
/* get terms limited to post type
@ $taxonomies - (string|array) (required) The taxonomies to retrieve terms from.
@ $args - (string|array) all Possible Arguments of get_terms http://codex.wordpress.org/Function_Reference/get_terms
@ $post_type - (string|array) of post types to limit the terms to
@ $fields - (string) What to return (default all) accepts ID,name,all,get_terms.
if you want to use get_terms arguments then $fields must be set to 'get_terms'
*/
function get_terms_by_post_type($taxonomies,$args,$post_type,$fields = 'all'){
$args = array(
'post_type' => (array)$post_type,
'posts_per_page' => -1
);
$the_query = new WP_Query( $args );
$terms = array();
while ($the_query->have_posts()){
$the_query->the_post();
$curent_terms = wp_get_object_terms( $post->ID, $taxonomy);
foreach ($curent_terms as $t){
//avoid duplicates
if (!in_array($t,$terms)){
$terms[] = $c;
}
}
}
wp_reset_query();
//return array of term objects
if ($fields == "all")
return $terms;
//return array of term ID's
if ($fields == "ID"){
foreach ($terms as $t){
$re[] = $t->term_id;
}
return $re;
}
//return array of term names
if ($fields == "name"){
foreach ($terms as $t){
$re[] = $t->name;
}
return $re;
}
// get terms with get_terms arguments
if ($fields == "get_terms"){
$terms2 = get_terms( $taxonomies, $args );
foreach ($terms as $t){
if (in_array($t,$terms2)){
$re[] = $t;
}
}
return $re;
}
}
उपयोग:
यदि आपको केवल शब्द आईडी की सूची की आवश्यकता है:
$terms = get_terms_by_post_type('tag','','snippet','ID');
यदि आपको केवल नाम की सूची की आवश्यकता है तो:
$terms = get_terms_by_post_type('tag','','snippet','name');
यदि आपको केवल टर्म ऑब्जेक्ट की सूची की आवश्यकता है तो:
$terms = get_terms_by_post_type('tag','','snippet');
और अगर आपको get_terms के अतिरिक्त तर्कों का उपयोग करने की आवश्यकता है जैसे: ऑर्डरबाई, ऑर्डर, पदानुक्रम ...
$args = array('orderby' => 'count', 'order' => 'DESC', 'hide_empty' => 1);
$terms = get_terms_by_post_type('tag',$args,'snippet','get_terms');
का आनंद लें!
अपडेट करें:
पद गणना को विशिष्ट पद प्रकार परिवर्तन में ठीक करने के लिए:
foreach ($current_terms as $t){
//avoid duplicates
if (!in_array($t,$terms)){
$terms[] = $t;
}
}
सेवा:
foreach ($current_terms as $t){
//avoid duplicates
if (!in_array($t,$terms)){
$t->count = 1;
$terms[] = $t;
}else{
$key = array_search($t, $terms);
$terms[$key]->count = $terms[$key]->count + 1;
}
}