从父帖子中排除子术语

时间:2011-06-01 作者:JonnyPlow

如何排除子术语帖子显示在父术语帖子输出中??现在,它在父项和子项输出中重复。

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

3 个回复
SO网友:Dougal Campbell

在您的get_terms() 呼叫,尝试设置hierarchical 选项到false:

$children_terms = get_terms($taxonomy, array(
        \'parent\' => get_term_by(\'slug\', $parent_term, $taxonomy)->term_id,
        \'hierarchical\' => false
));
此选项通常默认为true, 这可能就是你得到额外副本的原因。

SO网友:Banago

我与这个问题斗争了三天,但最终我通过使用自定义查询获胜。将此代码放入分类中。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; ?>
我使用“菜单”分类法,但您需要进行相应的编辑。

SO网友:cheesypeanut

首先,正如Bainternet所说,您的功能是永无止境的。

但为了解决最初的问题,tax\\u查询有一个未记录的参数,用于防止提取子术语中的帖子。它需要一个相当新版本的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 将阻止显示层次分类法中的子帖子。

结束

相关推荐

WP Plugin for Terms of Use

寻找一个插件,以确保我的网站的临时(未登录)用户将同意使用条款。也就是说,他们第一次尝试访问网站上的任何页面时,会显示条款并提示同意。如果suer同意,将其存储在DB(首选)或cookie中。我遇到了“使用条款”插件,但它已经一年多没有更新了,我不确定它是否支持我的方案。谢谢