Obține postări atribuite unui termen specific de taxonomie personalizată, fără termenii copil

24 aug. 2011, 19:03:49
Vizualizări: 153K
Voturi: 28

Să zicem că am următorii termeni de taxonomie:

Termen 1
  Termen 1.1
  Termen 1.2
Termen 2
  Termen 2.1

Cum pot obține doar postările care sunt atribuite Termenului 1 și să nu includ pe cele atribuite Termenului 1.1 sau 1.2?

De exemplu:

$pages = get_posts(array(
  'post_type' => 'page',
  'numberposts' => -1,
  'tax_query' => array(
    array(
      'taxonomy' => 'taxonomy-name',
      'field' => 'id', 
      'terms' => 1 // Unde term_id pentru Termen 1 este "1".
    )
  )
);

îmi returnează și postările care au atribuiți Termenii 1.1 și 1.2.

Mulțumesc.

0
Toate răspunsurile la întrebare 5
1
64

Analizând clasa WP_Tax_Query din /wp-includes/taxonomy.php, am descoperit că există o opțiune 'include_children' care este implicit activată (true). Am modificat apelul meu original get_posts() cu următoarele, și funcționează perfect:

$pages = get_posts(array(
  'post_type' => 'page',
  'numberposts' => -1,
  'tax_query' => array(
    array(
      'taxonomy' => 'taxonomy-name',
      'field' => 'term_id', 
      'terms' => 1, /// Unde term_id al Termenului 1 este "1".
      'include_children' => false
    )
  )
));

Listă cu mai mulți parametri de interogare: https://developer.wordpress.org/reference/classes/wp_query/#taxonomy-parameters

25 aug. 2011 23:48:43
Comentarii

Citind din pagina Codex menționată, cred că valoarea 'field' din array-ul tax_query ar trebui să fie 'term_id' în loc de 'id': "Valorile posibile sunt 'term_id', 'name' și 'slug'. Valoarea implicită este 'term_id'." Presupun că 'id' funcționează doar pentru că determină revenirea la valoarea implicită.

Jani Uusitalo Jani Uusitalo
26 sept. 2015 12:22:09
0

am dat peste asta recent:

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

sursa: http://return-true.com/2011/08/wordpress-display-posts-from-a-term-without-displaying-posts-from-child-terms/

24 aug. 2011 19:53:46
0

Iată codul complet, sper că vă va fi de ajutor. Mulțumesc

<?php 
$terms_array = array( 
  'taxonomy' => 'services', // puteți schimba conform taxonomiei dumneavoastră
  'parent'   => 0 // Dacă parent => 0 este setat, vor fi returnate doar termenii de nivel superior
);
$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', // puteți schimba conform tipului de postare personalizat
      'tax_query' => array(
          array(
              'taxonomy' => 'services', // puteți schimba conform taxonomiei dumneavoastră
              'field' => 'term_id', // aceasta poate fi 'term_id', 'slug' sau '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; // Termină bucla foreach pentru postări ?>
</ul>
<?php wp_reset_postdata(); ?>

<?php endforeach; // Termină bucla foreach pentru termeni ?>  
14 iul. 2018 20:30:32
0

este folosit operatorul 'IN' și funcționează

'taxonomy' => 'collections', 'terms' => array( 28 ), 'field' => 'id', 'operator' => 'IN'

24 aug. 2011 19:43:34
0

Puteți evita interogarea taxonomiei astfel:

$posts = get_posts(
      array(
          'posts_per_page' => -1,
          'post_type' => 'my_post_type',
          'services' => term->name
      )
);
11 sept. 2024 15:37:18