只列出帖子所在的子类别,属于特定的父类别

时间:2013-10-20 作者:codeview

要么这比需要的更难,要么我对WordPress/PHP理解不太好:(我只想显示特定父类别的子/子类别……但前提是帖子位于这些子类别中。具体示例:

我正在建立一个葡萄酒评论网站,分类如下:

  • Brand<子类别1、子类别2等Region<子类别1、子类别2等Grape<子类别1等父类别永远不会改变,每个帖子在每个父类别下至少选择一个子类别,因此在循环中我可以按名称列出父类别。但我需要动态输出子类别,如下所示:

    Brand: <?php list_post_subcategories_of(\'brand\'); ?>
    Region: <?php list_post_subcategories_of(\'region\'); ?>
    Grape: <?php list_post_subcategories_of(\'grape\'); ?>
    
    有没有这样简单的方法?这似乎应该是Wordpress的一个基本功能?我已经查看了“get\\u categories”和“in\\u categority”函数,但它们似乎无法做到这一点。

1 个回复
最合适的回答,由SO网友:Milo 整理而成

我会亲自创建三个custom taxonomies 而不是对类别/子类别执行此操作,那么这就不是问题了。

要对类别/子类别执行此操作,请从父类别的名称/ID开始,循环遍历每个父类别,然后在其中循环遍历与帖子关联的术语,并对照顶级类别的ID检查术语的父ID:

// names / IDs of parents
$parents = array(
    \'Brand\' => 42,
    \'Region\' => 22,
    \'Grape\' => 18
);
// get post categories
$categories = get_the_terms( $post->ID, \'category\' );
// output top level cats and their children
foreach( $parents as $parent_name => $parent_id ):
    // output parent name and link
    echo \'<a href="\' . get_term_link( $parent_id, \'category\' ) . \'">\' . $parent_name . \'</a>: \';
    // initialize array to hold child links
    $links = array();
    foreach( $categories as $category ):
        if( $parent_id == $category->parent ):
            // put link in array
            $links[] = \'<a href="\' . get_term_link( $category ) . \'">\' . $category->name . \'</a>\';
        endif;
    endforeach;
    // join and output links with separator
    echo join( \', \', $links );
endforeach;
编辑-动态获取顶级术语:

// get top level terms
$parents = get_terms( \'category\', array( \'parent\' => 0 ) );
// get post categories
$categories = get_the_terms( $post->ID, \'category\' );
// output top level cats and their children
foreach( $parents as $parent ):
    // output parent name and link
    echo \'<a href="\' . get_term_link( $parent ) . \'">\' . $parent->name . \'</a>: \';
    // initialize array to hold child links
    $links = array();
    foreach( $categories as $category ):
        if( $parent->term_id == $category->parent ):
            // put link in array
            $links[] = \'<a href="\' . get_term_link( $category ) . \'">\' . $category->name . \'</a>\';
        endif;
    endforeach;
    // join and output links with separator
    echo join( \', \', $links );
endforeach;

结束

相关推荐

WP_QUERY返回的SQL具有wp_posts.ID=-1

我有一个基于这些参数的自定义循环(如下所示),由于某种原因,在运行时,返回的SQL包含以下片段:。。。和wp\\U帖子。ID=-1。。。我没有从db得到任何结果。如果在没有此片段的情况下对db运行查询,则会得到所需的结果。有人能指出导致这种行为的参数列表有什么问题吗?$args = array ( \'post_status\' => \'draft\', \'posts_per_page\' => 10, \'