2010-07-28 19 views
9

में कस्टम वर्गीकरण से सभी पोस्ट प्राप्त करें क्या वर्डप्रेस में वर्गीकरण से सभी पोस्ट प्राप्त करने का कोई तरीका है?वर्डप्रेस

taxonomy.php में, मेरे पास यह कोड है जो वर्तमान अवधि से संबंधित शब्द से पोस्ट प्राप्त करता है।

$current_query = $wp_query->query_vars; 
query_posts(array($current_query['taxonomy'] => $current_query['term'], 'showposts' => 10)); 

मैं इस अवधि के बावजूद वर्गीकरण में सभी पदों के साथ एक पृष्ठ बनाना चाहता हूं।

वहाँ यह करने के लिए एक आसान तरीका है, या मैं शब्दों के लिए वर्गीकरण क्वेरी करने के लिए है, तो पाश उन्हें गर्त उद्यम, आदि

उत्तर

8
$myterms = get_terms('taxonomy-name', 'orderby=none&hide_empty');  
echo $myterms[0]->name; 
इसी के साथ

आप पहली बार आइटम पोस्ट चाहते हैं, यो फिर foreach बना सकते हैं; पाश:

foreach ($myterms as $term) { ?> 
    <li><a href="<?php echo $term->slug; ?>"><?php echo $term->name; ?></a></li> <?php 
} ?> 

इस तरह आप उन्हें सूचीबद्ध हैं, तो आप उन सभी को पोस्ट करने के लिए, -मेरे, foreach एक के अंदर एक सामान्य वर्डप्रेस लूप बना समाधान-चाहते हैं, लेकिन ऐसा लगता है कि कुछ है करने के लिए है, तो:

foreach ($myterms as $term) : 

$args = array(
    'tax_query' => array(
     array(
      $term->slug 
     ) 
    ) 
); 

// assigning variables to the loop 
global $wp_query; 
$wp_query = new WP_Query($args); 

// starting loop 
while ($wp_query->have_posts()) : $wp_query->the_post(); 

the_title(); 
blabla.... 

endwhile; 

endforeach; 

मैंने कुछ बहुत ही here पोस्ट किया।

+2

ऊपर के उदाहरण:

वर्गीकरण स्लग ही सभी पोस्ट वर्गीकरण की किसी भी शर्त सौंपा है की सूची बनाने के लिए, आप EXISTS operator of tax_query in WP_Query उपयोग करने की आवश्यकता term_name'' को इस 'वर्गीकरण' => "$ term_name" की तरह डबल-उद्धृत करने की आवश्यकता है, या इस 'वर्गीकरण' => $ term_name' जैसे बेहतर उद्धरण, या इससे पहले भी बेहतर असाइनमेंट को छोड़ दें और केवल ' 'वर्गीकरण' => $ शब्द-> स्लग'। उस ने कहा, दिखाया गया तरीका ['tax_query' => सरणी (...) 'का उपयोग करके दिखाया गया तरीका [http://codex.wordpress.org/Class_Reference/WP_Query#Taxonomy_Parameters) के पक्ष में बहिष्कृत कर दिया गया है। उम्मीद है की यह मदद करेगा। – MikeSchinkel

+0

क्षमा करें, देरी ... आप सही हैं। मैंने तदनुसार मेरा जवाब संशोधित किया :) –

+0

बढ़िया! साथ में मुझे उम्मीद है कि हमारे प्रयास दूसरों की मदद करेंगे। – MikeSchinkel

11

@PaBLoX ने बहुत अच्छा समाधान किया लेकिन मैंने स्वयं को एक समाधान दिया जो थोड़ा मुश्किल है और प्रत्येक पद के लिए हर बार सभी पदों के लिए पूछताछ करने की आवश्यकता नहीं है। और क्या होगा अगर एक ही पद में एक से अधिक शब्द आवंटित किए गए हों? क्या यह एक ही पोस्ट को कई बार प्रस्तुत नहीं करेगा?

<?php 
    $taxonomy = 'my_taxonomy'; // this is the name of the taxonomy 
    $terms = get_terms($taxonomy, 'orderby=count&hide_empty=1'); // for more details refer to codex please. 
    $args = array(
     'post_type' => 'post', 
     'tax_query' => array(
        array(
         'taxonomy' => 'updates', 
         'field' => 'slug', 
         'terms' => m_explode($terms,'slug') 
        ) 
       ) 
     ); 

    $my_query = new WP_Query($args); 
    if($my_query->have_posts()) : 
     while ($my_query->have_posts()) : $my_query->the_post(); 

       // do what you want to do with the queried posts 

      endwhile; 
    endif; 
    ?> 

इस समारोह m_explode जो मैं functions.php फ़ाइल में डाल दिया एक कस्टम कार्य है।

function m_explode(array $array,$key = ''){  
     if(!is_array($array) or $key == '') 
      return;   
     $output = array(); 

     foreach($array as $v){   
      if(!is_object($v)){ 
       return; 
      } 
      $output[] = $v->$key; 

     } 

     return $output; 

     } 

अद्यतन

हम इस कस्टम m_explode समारोह की आवश्यकता नहीं है। wp_list_pluck() फ़ंक्शन बिल्कुल वही करता है। इसलिए हम m_explode को wp_list_pluck() के साथ प्रतिस्थापित कर सकते हैं (पैरामीटर समान होंगे)। DRY, है ना?

+0

इसके लिए बहुत बहुत धन्यवाद! :) वास्तव में मुझे बहुत मदद मिली। – Woppi

0

शब्दों के लिए क्वेरी लूप में रहते हुए, आप एक सरणी में सभी पोस्ट संदर्भ एकत्र कर सकते हैं और बाद में इसे एक नए WP_Query में उपयोग कर सकते हैं।

$post__in = array(); 
while ($terms_query->have_posts()) : $terms_query->the_post(); 
    // Collect posts by reference for each term 
    $post__in[] = get_the_ID(); 
endwhile; 

... 

$args = array(); 
$args['post__in'] = $post__in; 
$args['orderby'] = 'post__in'; 
$other_query = new WP_Query($args); 
0

पोस्ट प्रकारों के विपरीत, वर्डप्रेस में वर्गीकरण के लिए मार्ग नहीं है। ` 'वर्गीकरण' => '$ के साथ लाइन पर

// Register a taxonomy 'location' with slug '/location'. 
register_taxonomy('location', ['post'], [ 
    'labels' => [ 
    'name' => _x('Locations', 'taxonomy', 'mydomain'), 
    'singular_name' => _x('Location', 'taxonomy', 'mydomain'), 
    'add_new_item' => _x('Add New Location', 'taxonomy', 'mydomain'), 
    ], 
    'public' => TRUE, 
    'query_var' => TRUE, 
    'rewrite' => [ 
    'slug' => 'location', 
    ], 
]); 

// Register the path '/location' as a known route. 
add_rewrite_rule('^location/?$', 'index.php?taxonomy=location', 'top'); 

// Use the EXISTS operator to find all posts that are 
// associated with any term of the taxonomy. 
add_action('pre_get_posts', 'pre_get_posts'); 
function pre_get_posts(\WP_Query $query) { 
    if (is_admin()) { 
    return; 
    } 
    if ($query->is_main_query() && $query->query === ['taxonomy' => 'location']) { 
    $query->set('tax_query', [ 
     [ 
     'taxonomy' => 'location', 
     'operator' => 'EXISTS', 
     ], 
    ]); 
    // Announce this custom route as a taxonomy listing page 
    // to the theme layer. 
    $query->is_front_page = FALSE; 
    $query->is_home = FALSE; 
    $query->is_tax = TRUE; 
    $query->is_archive = TRUE; 
    } 
}