如何排除父类别而显示子类别?

时间:2011-05-23 作者:Alli

我知道了如何在我的单篇文章视图侧栏中排除当前文章的显示,但现在我想排除父类别,只显示子类别。有什么办法吗?非常感谢!!

<div id="sidebar" class="grid_4">
<div class="item portfolio"><hr></hr>
    <h4>Similar Items</h4>
<?php
    if ( is_single() ) {
    $cats = wp_get_post_categories($post->ID);
    if ($cats) {
    $first_cat = $cats[0];
    $args=array(
      \'cat\' => $first_cat, //cat__not_in wouldn\'t work
      \'post__not_in\' => array($post->ID),
         \'showposts\'=>8,
      \'caller_get_posts\'=>1
);
    $my_query = new WP_Query($args);
    if( $my_query->have_posts() ) {
      echo \'\';
      while ($my_query->have_posts()) : $my_query->the_post(); ?>

<?php if (in_category(\'15\')) continue; ?>

<div ID="similarentry"><ul>
            <li ID="similarthmb"><?php get_the_image( array( \'custom_key\' => array( \'thumbnail\' ), \'default_size\' => \'thumbnail\', \'width\' => \'119\', \'height\' => \'75\', \'link_to_post\' => true ) ); ?></li>
            <li ID="similarttl"><a href="<?php the_permalink() ?>" rel="bookmark" title="Permanent Link to <?php the_title_attribute(); ?>"><?php the_title() ?></a></li>
        </ul></div>
       <?php
      endwhile;
    } //if ($my_query)
  } //if ($cats)
  wp_reset_query();  // Restore global post data stomped by the_post().
} //if (is_single())
?>
</div></div>

3 个回复
最合适的回答,由SO网友:Marketing Consultant 整理而成

我花了将近两个月的时间构建和调试Total Widget Control 要对所有站点小部件执行此操作。请容忍我将代码从整个小部件控制中剥离出来,并尝试使其对您可用。

    global $wp_query
    $twc_menu_item_object = $wp_query->object_id; //is the object id of the current page.
    $objects[\'menu-item-object\'] = \'\'; //the object id of the tax to display under

    if ( taxonomy_exists($twc_menu_item_object) && isset($objects[\'menu-item-object\']) )
    {
        foreach ($objects[\'menu-item-object\'] as $menu_id => $menu_type)
        {
            if ( $menu_type != $twc_menu_item_object ) continue;
            if ( !cat_is_ancestor_of( $menu_id, $object_id ) ) continue;
            return true;
        }
    }
     return false;

SO网友:Will Ashworth

Comments inline:

<?php
     global $wp_query;
    //* first let\'s get current post parent category ID

    $ID = $wp_query->posts[0]->ID; //* get current post ID
    $postcat = get_the_category($ID); //* based on post ID, get current post categories IDs -> WP function returns array of stdClass Objects, one stdClass Object for each category; if there is child - parent relationship, first it will return Objects for children categories and than for parents -> add "print_r ($postcat);" without quotation marks in next row to see content of array
    $cat = $postcat[0]->cat_ID; //* get first category ID from first Object in $postcat array (if post has children categories, it will get first child ID, else it will get first category ID)
    $thiscat = get_category ($cat); //* get array of category objects for $cat (current) category -> add "print_r ($thiscat);" without quotation marks in next row to see content of array
    $parent = $thiscat->category_parent; //* and extract parent category ID; if category has no parent category (and parent category has no parent), ID = 0

    //* now we have current category parent ID No, or if category has no children ID = 0
    //* let\'s check if we heave categroy with children categories or not

    if ($parent == 0) //* if parent ID = 0, it is category without parent category    
        {} //* do nothing 

    else { //* else, if it has children categories

        $subcategories = get_categories(\'child_of=\'.$parent); //* get array of children categories Objects and

        $items=\'\'; //* create new ArrayObject and

            foreach($subcategories as $subcat) { //* foreach child category in array
                if($thiscat->term_id == $subcat->term_id) //* check if current category ID is same as child category ID
                $current = \' current-cat\'; //* if true, add current-cat to li class
                else $current = \'\'; //* if not, add nothing

                $items .= \'
                <li class="cat-item cat-item-\'.$subcat->term_id.$current.\'"> <!-- if is child current, add here .current-cat //-->
                    <a href="\'.get_category_link( $subcat->term_id ).\'" title="\'.$subcat->description.\'">\'.$subcat->name.\' (\'.$subcat->count.\' posts)</a> <!-- link to -> category link, title -> category description, show -> category name and No of posts //-->
                </li>\';
            }

        echo "<ul>$items</ul>";
    }
?>
SO网友:Welby Audry

$categories = get_categories(\'child_of=\'.INSERT_YOUR_CATEGORY_PARENT_HERE.\'\'); 
foreach ($categories as $category) {
    echo $category->name;
}
编者注:INSERT_YOUR_CATEGORY_PARENT_HERE 必须替换,否则它将被视为未定义的常量并引发错误

结束