显示帖子所属的子类别(来自特定类别)列表

时间:2019-02-27 作者:Omniatom

这段代码几乎可以工作,但它带来了我不想显示的其他类别(最小值为1,最大值为3)。我有几个类别和子类别,可以在同一篇文章中标记,但我只想显示标记的子类别,它们是cat id=59的子类别(示例)。

代码:

$taxonomy = \'category\';

// get the term IDs assigned to post.
$post_terms = wp_get_object_terms( $post->ID, $taxonomy, array( \'fields\' => \'ids\' ) );
// separator between links
$separator = \', \';
$categories = get_the_category();
$parentid = $categories[0]->category_parent;
$parents = get_terms( \'category\', array( \'parent\' => 59 ) );
if ( !empty( $post_terms ) && !is_wp_error( $post_terms ) ) {

    $term_ids = implode( \',\' , $post_terms );
    $terms = wp_list_categories( \'title_li=&style=none&echo=0&child_of=\' . $parentid . \'&taxonomy=\' . $taxonomy . \'&include=\' . $term_ids );
    $terms = rtrim( trim( str_replace( \'<br />\',  $separator, $terms ) ), $separator );

    // display post categories
    echo  $terms;
}

enter image description here

enter image description here

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

所以你的问题是,你基本上混淆了一个解决方案的三次尝试。里面有很多冗余代码,让人读起来很困惑。生成您看到的输出的实际代码行如下所示:

$terms = wp_list_categories( \'title_li=&style=none&echo=0&child_of=\' . $parentid . \'&taxonomy=\' . $taxonomy . \'&include=\' . $term_ids );
问题是你在这里设置了child_of=\' . $parentid, 但是$parentid 未设置为59, 设置为:

$parentid = $categories[0]->category_parent;
无法保证这将是您想要的特定类别。返回的类别顺序get_the_category() 类别添加到帖子的顺序。这不一定是59 作为其父级。如果第一个类别没有父类别,则此函数将列出所有类别。

如果需要:

列出当前帖子的类别59.那么这就是您需要的全部代码:

$categories = wp_get_object_terms( $post->ID, \'category\', [ \'parent\' => 59, \'number\' => 3 ] );

if ( ! empty( $categories ) ) {
    $category_links = [];

    foreach ( $categories as $category ) {
        $category_links[] = \'<a href="\' . esc_url( get_term_link( $category ) ) . \'">\' . $category->name . \'</a>\';
    }

    echo implode( \', \', $category_links );
}

相关推荐

Admin Theme customization

我遵循wordpress codex网站上关于通过插件创建管理主题的说明。我激活了插件,但我的样式表没有包含在<head>.. 这是我的代码:add_action( \'admin_init\', \'kd_plugin_admin_init\' ); add_action( \'admin_menu\', \'kd_plugin_admin_menu\' ); function kd_plugin_admin_init() { /* Register