如何显示类别列表

时间:2014-02-08 作者:ozbassplayer

我正在尝试设置一个类别列表,其中包含指向该类别的可单击链接。我已经看过:

3 个回复
SO网友:John Zenith

我将向您展示如何在WordPress中显示类别列表,以及如何标记活动类别,请参见下面的代码:

<?php
// Get the current queried object
$term    = get_queried_object();
$term_id = ( isset( $term->term_id ) ) ? (int) $term->term_id : 0;

$categories = get_categories( array(
    \'taxonomy\'   => \'category\', // Taxonomy to retrieve terms for. We want \'category\'. Note that this parameter is default to \'category\', so you can omit it
    \'orderby\'    => \'name\',
    \'parent\'     => 0,
    \'hide_empty\' => 0, // change to 1 to hide categores not having a single post
) );
?>

<ul>
    <?php
    foreach ( $categories as $category ) 
    {
        $cat_ID        = (int) $category->term_id;
        $category_name = $category->name;

        // When viewing a particular category, give it an [active] class
        $cat_class = ( $cat_ID == $term_id ) ? \'active\' : \'not-active\';

        // I don\'t like showing the [uncategoirzed] category
        if ( strtolower( $category_name ) != \'uncategorized\' )
        {
            printf( \'%3$s\',
                esc_attr( $cat_class ),
                esc_url( get_category_link( $category->term_id ) ),
                esc_html( $category->name )
            );
        }
    }
    ?>
</ul>

关于上述代码的注释:

get_queried_object() 检索当前查询的对象。例如:

如果您在一篇文章中,它将返回post对象如果您在一个页面中,它将返回page对象如果您在存档页面中,它将返回post类型对象如果您在类别存档中,它将返回category对象如果您在作者存档中,它将返回author对象等,但在使用get_queried_object(), 即使在is_post_type_archive() 是真的。查看更多信息。

另外,请注意get_queried_object() 是的包装器$wp_query->get_queried_object(), 因此,它返回一个WP对象数据类型。

get\\u categories()

get_categories() 检索类别对象列表。当前仅接受一个参数-$args. $args参数指定应用于检索类别的参数列表。看见get_terms() 其他选项。

然而,要获取特定帖子的类别,我编写了一个简单的函数:How to get list of categories for a post

SO网友:Mayeenul Islam

根据链接的WPSE线程accepted answer, 代码为(复制和粘贴):

$categories =  get_categories(\'child_of=31\');  
foreach  ($categories as $category) {
    //Display the sub category information using $category values like $category->cat_name
    echo \'<h2>\'.$category->name.\'</h2>\';
    echo \'<ul>\';

    foreach (get_posts(\'cat=\'.$category->term_id) as $post) {
        setup_postdata( $post );
        echo \'<li><a href="\'.get_permalink($post->ID).\'">\'.get_the_title().\'</a></li>\';   
    }  
    echo \'</ul>\';
}
至于我们(WordPress开发人员)Codex 是大多数基础知识的关键。因此,根据WordPress Codex:

  • get_categories() 查询站点的所有类别,并返回一个数组get_posts() 查询站点的所有帖子,并返回一个数组WP_Query(). 您可以从Codex页面获取所有可能的参数。作为一名PHP爱好者,您知道代码是如何工作的:$categories 将所有类别和每个类别get_posts() 正在上任。

    因此,它非常类似于原始PHP中的mySQL查询和foreach循环。您可以将此代码放入任何WP站点的活动主题中template 第页。Template Hierarchy 可以为您提供详细的见解。

    根据您的标题,问题是:

    如何显示类别列表

    答案可以是:

    $categories =  get_categories();
    echo \'<ul>\';
    foreach  ($categories as $category) {
      echo \'<li>\'. $category->cat_name .\'</li>\';
    }
    echo \'</ul>\';
    
    我不太确定代码放在哪里,也不知道如何访问页面上的代码

    我已经说过了,试着把代码放到index.php, front-page.php, ... 在任何地方关键概念是:它只是一个SQL查询和一个有用的foreach PHP循环。

SO网友:Brad Dalton

此方法允许您通过向代码中添加cat i.d来排除任何类别。

以下是一种更好的方法,可以从WordPress或主题特定挂钩位置的子主题函数文件中有条件地添加类别列表:

add_filter( \'the_content\', \'wpsites_list_cats\' );
function wpsites_list_cats($content) {
if( is_singular(\'post\') && is_main_query() ) {
$args = array(
\'orderby\' => \'name\',
\'exclude\' => \'\',
\'include\' => \'\',
\'parent\' => 0
);
$categories = get_categories( $args );
echo\'<nav id="primary-navigation" class="primary-navigation" role="navigation">\';
foreach ( $categories as $category ) {
echo \'<li><a href="\' . get_category_link( $category->term_id ) . \'">\' .  $category->name . \'</a></li>\';
}
echo\'</nav>\';
return $content;
    }
}
结果如下

enter image description here

如果您想使用上面代码中包含的二十四个导航菜单中的现有样式,那么这里就是结果。

enter image description here

该代码还允许您使用cat ID包括特定类别或排除任何类别

你也可以create a custom widget area 并使用本机WordPress类别小部件。

只需更改the_content 钩子以更改类别列表的位置。

修改自this source

结束

相关推荐

具有自定义分类的自定义帖子类型中的WP_DROPDOWN_CATEGORIES

我有一个自定义的帖子类型,它有自己的分类法,基本上“show Vinces”是帖子类型,Vincement regions是分类法。看到一个场馆无法在多个地区存在,我删除了默认的metta框,并使用wp_dropdown_categories(). 分类法项目正在输出并按我所希望的方式显示,但它们不会被提交,并且下拉列表在提交后不会保留所选内容。我已经尽我所能地查看原始metabox的各种属性,并尝试将这些属性应用到下拉列表中,但到目前为止,我没有任何乐趣。我看过一些various WPSE上的帖子和ha