¿Cómo excluir la categoría principal pero mostrar las categorías secundarias?

2

Descubrí cómo excluir la publicación actual de la visualización en mi barra lateral de vista única, pero ahora quiero excluir las categorías principales y mostrar solo las secundarias. ¿Alguna idea de como hacer esto? ¡¡Muy agradecido!!

<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>
    
pregunta Alli 23.05.2011 - 21:49

3 respuestas

2

Pasé casi dos meses construyendo y depurando Control total de widgets para hacer exactamente esto para todos los widgets de un sitio. Tenga paciencia conmigo mientras saco el código de Total Widget Control y trato de hacerlo utilizable para usted.

    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;
    
respondido por el Ecommerce Consultant 26.05.2011 - 23:03
3

Comentarios en línea:

<?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>";
    }
?>
    
respondido por el Will Ashworth 23.05.2011 - 23:16
0
$categories = get_categories('child_of='.INSERT_YOUR_CATEGORY_PARENT_HERE.''); 
foreach ($categories as $category) {
    echo $category->name;
}

Nota del editor: INSERT_YOUR_CATEGORY_PARENT_HERE debe reemplazarse, de lo contrario, se consideraría una constante indefinida y generará un error.

    
respondido por el Welby Audry 26.07.2013 - 11:58

Lea otras preguntas en las etiquetas