如何使用其ID显示wordpress类别列表

时间:2013-04-02 00:25:03

标签: wordpress list parent-child categories

任何人都可以告诉我如何显示我的wordpress类别(父母和孩子)及其ID。 我希望他们以这种方式打印:

欧洲,英国,伦敦(欧洲是父母类别,他们的孩子是英国) 10,20,33(这些是他们的ids)

欧洲,法国,巴黎 10,22,45

欧洲,法国,嘎纳 10,22,49

我尝试了这段代码,但它对我不起作用:

     <?php  
$categories = get_the_category();
 $this_cat_ID = $categories[0]->cat_ID;
 $this_cat_name = $categories[0]->cat_name;
 $this_cat_url = get_category_link($this_cat_ID);
 // get the sub category if we have them
 foreach ($categories as $cat) {
    $parent = $cat->category_parent;
    if ($parent != 0 ){
       $sub_cat_ID = $cat->cat_ID;
       $sub_cat_name = $cat->cat_name;
       $sub_cat_url = get_category_link($sub_cat_ID);
    }
 }
 if (!$sub_cat_ID) {
   echo $this_cat_ID;
} else {
   echo $sub_cat_ID;
}
?>

非常感谢您的帮助,谢谢

3 个答案:

答案 0 :(得分:3)

WordPress功能wp_list_categories将返回所有类别的列表。如果将层次结构标志设置为true,则将获得整个层次结构。阅读上面链接中的codex文章了解详情。

还有一个get_categories function返回未格式化的结果。您可以在自己的PHP代码中使用它。

第三种选择是读取数据库,有三个表wp_terms,wp_term_taxonomy和wp_term_relationships包含类别树。这是the database structure

编辑:这是一个短代码,它会生成一个类似于列表的嵌套集合的列表:

function show_categories($atts, $content) {
    extract( shortcode_atts( array('taxonomy' => 'category'), $atts ) );
    $cats = get_categories(array('taxonomy' => $taxonomy,'hide_empty' => 0, 'hierarchical' => 0, 'parent' => 0));
    return show_categories_level($cats, '', '', $taxonomy);
}

function show_categories_level($cats, $names, $ids,$taxonomy) {
    $res = '<ul>';
    foreach ($cats as $cat) {
        if($names)$n = "$names, $cat->name"; else $n = $cat->name;
        if($ids)$i = "$ids, $cat->term_id"; else $i = $cat->term_id;    
        $res = $res."<li>$n : $i</li>";
        $kittens = get_categories(array('taxonomy' => $taxonomy,'hide_empty' => 0, 'hierarchical' => 0, 'parent' =>$cat->term_id));
        if($kittens) {
            $res .= ("<li>".show_categories_level($kittens, $n, $i, $taxonomy)."</li>");
        }
    }
    return $res."</ul>";
}
add_shortcode('show-categories', 'show_categories');

要使用此功能,请将此代码添加到functions.php中,并将短代码添加到您希望显示的位置:

<h2>Default Categories</h2>
[show-categories]

或者您可以指定要列出的分类

<h2>My Taxonomy Categories</h2>
[show-categories taxonomy="my_taxonomy"]

这不是获得此结果的最有效方式,但它适用于此处。如果您从get_categories的分层版本开始或使用数据库,您可以获得更快的版本。

答案 1 :(得分:1)

你想在哪里显示这个?内循环?外?在single.php? category.php? .....?

如果你想在一个单独的地方展示它,首先包括wp-load.php,就像这样

<? php


header('Content-Type: text/html; charset: UTF-8');
require( '../../../../wp-load.php' ); // use the path which will fit your situation

$my_query = new WP_Query();
$my_query->query(array(
          'post_type' => 'post',
          'orderby'   => 'title',
          'order'     => 'ASC',
        ));

if ($my_query->have_posts()) : while ($my_query->have_posts()) : $my_query->the_post(); 

// use your code here after checking codex

endwhile;
endif;
?>

答案 2 :(得分:0)

我想做的是: The steps I Followed(请查看此链接)

我只想更改此代码:

<ul> <?php wp_list_categories('show_count=1&title_li=&hide_empty=0'); ?></ul>

以便以这种格式显示所有类别及其子项的列表及其ID:

实施例: 欧洲,英国,伦敦,东汉姆:25,28,34,36 这只是一个父类别(欧洲)及其子女(英国) 英国的孩子是伦敦,伦敦的孩子是东汉姆。 25是欧洲的id,28是英国的id,34是伦敦的id,36是东汉姆的id

请注意:我只想在页面上显示此列表,如上面的链接所述。 非常感谢你