获取帖子不在的所有类别

时间:2015-06-06 作者:lucian

我正在尝试获取当前帖子未包含的所有类别的列表。我走了这么远。。。

$categories = get_the_category( $post_id );
$nocats = get_terms(\'category\', array(\'exclude\' => $categories) );
foreach ( $nocats as $nocat ) {echo $nocat->name;echo ","; }
。。。但它不起作用。我想这与内爆$categories 数组,但当我尝试此操作时,该对象出错。。。

$categories = get_the_category( $post_id );
$excats = implode(\',\', $categories);
$nocats = get_terms(\'category\', array(\'exclude\' => $excats) );
foreach ( $nocats as $nocat ) {echo $nocat->name;echo ","; }
。。。所以现在我被困住了。我做错了什么?

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

好啊因此,代码的第一位更加正确,但仍然存在问题。一件一件。。。

$categories = get_the_category( $post_id );
$post_id 未在您发布的代码中设置。我假设该值是在页面前面的某个地方设置的,否则这就是您的第一个问题。

$nocats = get_terms(\'category\', array(\'exclude\' => $categories) );
Theexclude 参数将接受一个术语ID数组,但这不是get_the_category() 返回。它返回一个对象数组。你不能按原样使用它。(顺便说一句,这也是你遇到麻烦的原因$excats = implode(\',\', $categories);. 您正在尝试将对象转换为字符串)。您需要提取ID:

$categories = wp_list_pluck($categories,\'term_id\');
然后:

$nocats = get_terms(\'category\', array(\'exclude\' => $categories) );
还有一个步骤:get_terms() 默认情况下,将只返回已分配帖子的类别。如果确实要显示需要添加的所有类别\'hide_empty\' => false 到您的参数列表:

$nocats = get_terms(
  \'category\', 
  array(
    \'exclude\' => $categories,
    \'hide_empty\' => false
  ) 
);
现在,您的代码应该可以工作了:

$categories = get_the_category( $post->ID );
// var_dump($categories);
$categories = wp_list_pluck($categories,\'term_id\');
// var_dump($categories);
$nocats = get_terms(
  \'category\', 
  array(
    \'exclude\' => $categories,
    \'hide_empty\' => false
  ) 
);
// var_dump($nocats);
foreach ( $nocats as $nocat ) {
  echo $nocat->name;
  echo ","; 
}

结束

相关推荐

php if username is role

我知道,如果某个登录用户是某个角色,您可以使用<?php if ( current_user_can(\'contributor\') ) : ?> media files loop <?php endif; ?> 然而,我想做同样的事情,但对于一个特定的用户名,而不是登录的用户。我在wordpress网站上有用户配置文件,其中一些是艺术家,如果查看的配置文件是艺术家,我想显示他们上传的媒体。(如果正在查看的配置文件是另一个角色,则不会返回任何内容