get_posts को एक विशिष्ट कस्टम टैक्सोनॉमी टर्म सौंपा गया है, न कि टर्म के बच्चों को


18

कहो कि मेरे पास निम्नलिखित वर्गीकरण शर्तें हैं:

Term 1
  Term 1.1
  Term 1.2
Term 2
  Term 2.1

मैं केवल ऐसे पद कैसे प्राप्त कर सकता हूं जो टर्म 1 को दिए गए हैं और इसमें वे शब्द शामिल नहीं हैं जिन्हें टर्म 1.1 या टर्म 1.2 में सौंपा गया है?

उदाहरण के लिए:

$pages = get_posts(array(
  'post_type' => 'page',
  'numberposts' => -1,
  'tax_query' => array(
    array(
      'taxonomy' => 'taxonomy-name',
      'field' => 'id',
      'terms' => 1 // Where term_id of Term 1 is "1".
    )
  )
);

मुझे ऐसे पद भी दे रहा है जिनकी शर्तें 1.1 और 1.2 हैं।

धन्यवाद।

जवाबों:


36

WPwax_Query वर्ग को /wp-includes/taxonomy.php में देखने पर, मैंने पाया कि एक 'शामिल_चिल्ड्रेन' विकल्प है जो सत्य के लिए चूक करता है। मैंने अपने मूल get_posts () कॉल को निम्न के साथ संशोधित किया, और यह बहुत अच्छा काम करता है:

$pages = get_posts(array(
  'post_type' => 'page',
  'numberposts' => -1,
  'tax_query' => array(
    array(
      'taxonomy' => 'taxonomy-name',
      'field' => 'term_id', 
      'terms' => 1, /// Where term_id of Term 1 is "1".
      'include_children' => false
    )
  )
));

अधिक क्वेरी मापदंडों की सूची: http://codex.wordpress.org/Class_Reference/WP_Query#Taxonomy_Parameters


3
इससे जुड़े कोडेक्स पेज से पढ़ते हुए, मुझे लगता है कि कर_क्वेरी सरणी में 'फ़ील्ड' का मान 'आईडी' के बजाय 'टर्म_आईडी' होना चाहिए: "संभावित मान 'टर्म_आईडी', 'नाम' और 'स्लग' हैं। डिफ़ॉल्ट मान है। 'term_id'। " मुझे लगता है कि 'आईडी' केवल इसलिए काम करता है क्योंकि यह डिफ़ॉल्ट रूप से गिरावट का कारण बनता है।
जानी उस्तितालो

6

बस इस दिन आया था:

$tax = 'music';
$oterm = 'pop';
$term = get_term_by('slug', $oterm, $tax);
$termChildren = get_term_children($term->term_id, $tax);
$wp_query = new WP_Query();
$wp_query->query(
    array(
        'posts_per_page' => '5',
        'tax_query' => array(
            array(
                'taxonomy' => $tax,
                'field' => 'slug',
                'terms' => $oterm
            ),
            array(
                'taxonomy' => $tax,
                'field' => 'id',
                'terms' => $termChildren,
                'operator' => 'NOT IN'
            )
        )
    )
);

स्रोत: http://return-true.com/2011/08/wordpress-display-posts-from-a-term-without-displaying-posts-from-child-terms/


1

यहाँ पूर्ण कोड आशा है कि यह मदद करता है। धन्यवाद

<?php 
$terms_array = array( 
  'taxonomy' => 'services', // you can change it according to your taxonomy
  'parent'   => 0 // If parent => 0 is passed, only top-level terms will be returned
);
$services_terms = get_terms($terms_array); 
foreach($services_terms as $service): ?>
<h4><?php echo $service->name; ?></h4>
<?php 
$post_args = array(
      'posts_per_page' => -1,
      'post_type' => 'service', // you can change it according to your custom post type
      'tax_query' => array(
          array(
              'taxonomy' => 'services', // you can change it according to your taxonomy
              'field' => 'term_id', // this can be 'term_id', 'slug' & 'name'
              'terms' => $service->term_id,
          )
      )
);
$myposts = get_posts($post_args); ?>
<ul>
<?php foreach ( $myposts as $post ) : setup_postdata( $post ); ?>
  <li>
    <a href="<?php the_permalink(); ?>"><?php the_title(); ?></a>
  </li>
<?php endforeach; // Term Post foreach ?>
</ul>
<?php wp_reset_postdata(); ?>

<?php endforeach; // End Term foreach; ?>  

0

ऑपरेटर 'IN' का उपयोग किया जाता है और यह काम करता है

'वर्गीकरण' => 'संग्रह', 'शब्द' => सरणी (28), 'क्षेत्र' => 'आईडी', 'ऑपरेटर' => 'में'

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.