get_posts affecté à un terme de taxonomie personnalisé spécifique, et non à ses enfants

17

Disons que j'ai les termes de taxonomie suivants:

Term 1
  Term 1.1
  Term 1.2
Term 2
  Term 2.1

Comment puis-je obtenir uniquement les publications affectées au terme 1 sans inclure celles affectées au terme 1.1 ou au terme 1.2?

Par exemple:

$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".
    )
  )
);

me donne également des messages auxquels sont attribués les termes 1.1 et 1.2.

Merci.

    
posée robertwbradford 24.08.2011 - 18:03

4 réponses

35

En examinant la classe WP_Tax_Query dans /wp-includes/taxonomy.php, j'ai constaté qu'il existe une option "include_children" dont la valeur par défaut est true. J'ai modifié mon appel get_posts () d'origine avec les éléments suivants, et cela fonctionne très bien:

$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".
      'include_children' => false
    )
  )
));

Liste de paramètres de requête supplémentaires: enlace

    
réponse donnée robertwbradford 25.08.2011 - 22:48
4

vient de rencontrer cela l'autre jour:

$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'
            )
        )
    )
);

source: enlace

    
réponse donnée helgatheviking 24.08.2011 - 18:53
0

est utilisé par l'opérateur 'IN' et cela fonctionne

'taxonomy' = > 'collections', 'termes' = > tableau (28), 'champ' = > 'id', 'opérateur' = > 'IN'

    
réponse donnée Markus 24.08.2011 - 18:43
0

Voici un code complet en espérant que cela vous aidera. Merci

<?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; ?>  
    
réponse donnée Muddasir 14.07.2018 - 19:30

Lire d'autres questions sur les étiquettes