Obține postări atribuite unui termen specific de taxonomie personalizată, fără termenii copil
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.

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

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ă.

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

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 ?>
