我怎么能从帖子中知道所有的类别呢?

时间:2014-10-06 作者:Marcos

我需要知道wordpress帖子中的所有类别,但我的代码只给出了第一个类别,我不知道为什么。例如:如果一篇文章有类别“category1”和“category2”,我需要知道这些类别的Id。

$queryProductos = array("category_name"=>"category1,category2,category3","orderby"=>"title","order"=>"ASC");
$objetoProductos = new WP_Query($queryProductos);
if ($objetoProductos->have_posts()){
   ?>
    <article class="lista-productos" id="listado-productos">
        <?php       
        while($objetoProductos->have_posts()){
            $objetoProductos->the_post();
            $categoriaActual = get_the_category($post->ID);                
            $idCategoriaActual = $categoriaActual[0]->term_id;
            if (has_post_thumbnail()){
                print_r($categoriaActual);
             ?>
                <!--
                <div class="item-producto <?php echo $idCategoriaActual;?>">
                    <div class="foto-producto">
                        <?php the_post_thumbnail(\'miniatura-producto\');?>
                    </div>
                    <div class="datos-productos">
                        <p class="nombre-producto"><?php the_title();?></p>
                        <?php the_excerpt();?>
                        <div class="saber-mas">
                            <a href="<?php echo get_the_permalink();?>"><span>Ver Ficha</span></a>                                
                        </div>
                    </div>
                </div>            
                -->
            <?php   
            }                
        }
        wp_reset_postdata();
        ?>
    </article>        
    <?php
}   

2 个回复
最合适的回答,由SO网友:Pieter Goosen 整理而成

您的问题在于这段代码

$categoriaActual = get_the_category($post->ID);                
$idCategoriaActual = $categoriaActual[0]->term_id;
第一行获取数组中属于帖子的类别,这很好(只需注意,在循环中,您不需要传递帖子ID,这是默认情况下完成的)。第二行代码只显示返回数组中的第一个类别。$categoriaActual[0] 表示只返回数组中的第一个元素,即数组中的第一个类别

您可以从的codex页面查看示例get_the_category. 您可以用下面的代码替换我在回答中突出显示的两行。根据需要修改和使用

$categories = get_the_category();
$separator = \' \';
$output = \'\';
if($categories){
    foreach($categories as $category) {
        $output .= \'<a href="\'.get_category_link( $category ).\'" title="\' . esc_attr( sprintf( __( "View all posts in %s" ), $category->name ) ) . \'">\'.$category->cat_name.\'</a>\'.$separator;
    }
echo trim($output, $separator);
}

SO网友:Nicolai Grossherr

get_the_category()

返回一个对象数组,分配给帖子的每个类别对应一个对象。

因此,您在代码中所做的只是访问第一个对象,索引0。

$categoriaActual = get_the_category($post->ID);                
$idCategoriaActual = $categoriaActual[0]->term_id;
如果查看整个返回的数组,您将看到所有ID

print_r( $categoriaActual );
现在,实际上您只需要ID,所以:

$ca_ids_array = array();
foreach ( $categoriaActual as $ca ) {
    $ca_ids_array[] = $ca->term_id
}
print_r( $ca_ids_array );
或者使用WordPress功能wp_list_pluck():

$ca_ids_array = wp_list_pluck(
    get_the_category(
        get_the_ID()
    ),
    \'term_id\'
);
例如,如果希望从该数组中获得逗号分隔的列表,请执行以下操作:

$ca_ids_comma_sep_list = implode( \',\', $ca_ids_array );
要输出类别列表,更容易使用wp_list_categories, 返回格式化的结果。

结束

相关推荐

Show Pages in Categories

通过将此代码添加到函数中,我创建了category函数。php:function page_category() { register_taxonomy_for_object_type(\'category\', \'page\'); } // Add to the admin_init hook of your theme functions.php file add_action( \'init\', \'page_category\' ); 但问