どのようにして子用語の投稿を親用語の投稿の出力に表示しないようにすることができますか?現時点では、親と子の両方の用語の出力に重複しています。
//Function to display posts grouped by taxonomies
function display_posts_per_taxonomies($parent_term, $post_type = 'beat_posts', $taxonomy = 'beats'){
$parent_posts = get_posts(array(
'tax_query' => array( array(
'taxonomy' => $taxonomy,
'field' => 'slug',
'terms' => $parent_term
)),
'post_type' => $post_type
));
echo '<ul>';
foreach($parent_posts as $post){
echo "<li>{$post->post_title}</li>";
}
$children_terms = get_terms($taxonomy, array(
'parent' => get_term_by('slug', $parent_term, $taxonomy)->term_id
));
foreach($children_terms as $term){
echo '<li>';
display_posts_per_taxonomies($term->slug, $post_type, $taxonomy);
echo '</li>';
}
echo '</ul>';
}
以下は私が取り除こうとしているものです。
<ul>
<li>adsf</li>
<li>ergerg</li> <---get rid of this one (duplicate)
<li>asdfasdfsdf</li> <---get rid of this one (duplicate)
<li>rthhdhdfhdhdfhdfg</li>
<li>
<ul>
<li>ergerg</li>
<li>asdfasdfsdf</li>
</ul>
</li>
</ul>
get_terms()
呼び出しで、hierarchical
オプションをfalse
に設定してみます。
$children_terms = get_terms($taxonomy, array(
'parent' => get_term_by('slug', $parent_term, $taxonomy)->term_id,
'hierarchical' => false
));
このオプションは通常デフォルトでtrue
です。
私は3日間この問題と戦いましたが、結局私はカスタムクエリを使うことで勝ちました。このコードをtaxonomy.phpテンプレートに追加してください。
<?php
global $wpdb;
global $post;
$term = get_term_by('slug', $wp_query->get( 'term' ), 'menu');
$querystr = "
SELECT wposts.*
FROM $wpdb->posts wposts
LEFT JOIN $wpdb->term_relationships ON (wposts.ID = $wpdb->term_relationships.object_id)
LEFT JOIN $wpdb->term_taxonomy ON ($wpdb->term_relationships.term_taxonomy_id = $wpdb->term_taxonomy.term_taxonomy_id)
WHERE $wpdb->term_taxonomy.taxonomy = 'menu'
AND $wpdb->term_taxonomy.term_id IN( $term->term_id )
LIMIT 20";
$pageposts = $wpdb->get_results($querystr, OBJECT); ?>
<?php if( $pageposts ) : ?>
<?php foreach ( $pageposts as $post ): ?>
<?php setup_postdata($post); ?>
//Echo post title/content here.
<?php endforeach; endif; ?>
私は「メニュー」分類法を使用しますが、それに応じて編集する必要があります。
まず、Bainternetが言っているように、あなたの機能は終わらない。
しかし、元々の問題を解決するために、tax_queryには子の条件で投稿が取得されないようにするための文書化されていないパラメータがあります。それはかなり最近のバージョンのWordPressを必要とします(私はそれが実装された正確なバージョンを知りませんが、それは確かに最新のリリースで動作します)。
これを試してください、それはトリックをするべきです:
$parent_posts = get_posts(array(
'tax_query' => array(
array(
'taxonomy' => $taxonomy,
'field' => 'slug',
'terms' => $parent_term,
'include_children' => 0
)
),
'post_type' => $post_type
));
お気づきのとおり、'include_children' => 0
を含めると、階層分類法の子投稿が表示されなくなります。