获得作者以字符串数组形式使用的术语

时间:2013-06-13 作者:whiteletters in blankpapers

我正在使用list_author_used_terms 函数获取特定作者使用的术语(自定义分类法“wossom”中的术语,用于自定义帖子类型“aya-bi-aya”)。

function list_author_used_terms($author_id){

    $posts = get_posts( array(\'post_type\' => \'aya-bi-aya\', \'posts_per_page\' => -1, \'author\' => $author_id) );

    $author_terms = array();

    foreach ($posts as $p) {
        $terms = wp_get_object_terms( $p->ID, \'wossom\');

        foreach ($terms as $t) {
            $author_terms[] = (string)$t->name;
        }

    }
    return array_unique($author_terms);
}
在中author.php 模板文件,我想显示给定作者使用的术语。我喜欢这样:

<?php
$user = get_user_by(\'login\',get_query_var(\'author_name\'));

$used_terms=list_author_used_terms($user->ID);

foreach ($used_terms as $ut) {
?>
<a href="<?php echo get_term_link( $ut,"wossom"); ?>"><?php echo  $ut; ?></a>
<?php
} 
?>
当我print_r 这个$used_terms, 我得到了正确的数组,但是foreach 循环未显示任何内容。

我尝试单独打印时出现以下错误get_term_link( $ut[0],"wossom"); :

Catchable fatal error: Object of class WP_Error could not be converted to string in C:\\xampp\\htdocs\\blog\\wp-content\\themes\\twentyten\\author.php on line
我知道这是一个纯粹的php问题,但我真的很累,试图解决它。非常感谢您的帮助。

2 个回复
最合适的回答,由SO网友:whiteletters in blankpapers 整理而成

我从Rarst和S\\u ha\\u dum那里学到了两个很好的新技术,我想与所有PHP/Wordpress初学者分享:

  • Var_dump 函数用于在代码步骤中检查变量的性质。

    养成在尝试使用数据之前验证您是否拥有您认为拥有的数据类型的习惯。例如,执行if (!is_wp_error($variable)) {} 当您从Codexthat$变量中读取包含返回的函数时,可能会出现WP\\U错误。

    更多详细信息请参见评论和S\\u ha\\u dum答案。

    Solution to my problem:

    返回的WP_错误是get_term_link 函数,要求第一个参数为term\\u id或term\\u slug,而不是term\\u name。但我想注意的是,只有术语\\u slug对我有效,而术语\\u id甚至抄本都没有这样说。

    代码变成:

    foreach ($used_terms as $ut) {
      $inter= get_term_by( \'name\',$ut,\'wossom\' );
      $link = get_term_link($inter->slug,\'wossom\');
    
      if (!is_wp_error($link)) {
        ?>
        <a href="<?php echo $link; ?>"><?php echo  $inter->term_id; ?></a>
        <?php
      }
    }
    

SO网友:s_ha_dum

我不知道这个错误指的是哪一行,但如果一切都完全正确,那么这段代码就可以正常工作。

但实际上有几种方法可能会出错。例如,如果get_query_var(\'author_name\') 未设置,则在此行中出现错误:

$used_terms=list_author_used_terms($user->ID);
如果此处出现问题:

$terms = wp_get_object_terms( $p->ID, \'wossom\');
然后在此处获取并出错:

$author_terms[] = (string)$t->name;
因为$t 将是WP_Error 对象而不是stdClass对象中包含所需的术语数据。

这一行也发生了类似的事情:

<a href="<?php echo get_term_link( $ut,"wossom"); ?>"><?php echo  $ut; ?></a>
我认为解决方法是养成一种习惯,即在尝试使用数据之前,先验证您是否拥有您认为拥有的数据类型。

例如:

foreach ($used_terms as $ut) {
  $link = get_term_link( $ut,"category");
  if (!is_wp_error($link)) {
    ?>
    <a href="<?php echo $link; ?>"><?php echo  $ut; ?></a>
    <?php
  }
}

结束

相关推荐

什么是Jetpack无限滚动插件需要的Content.php文件?

我目前正在学习如何使用Jetpack infinite scroll插件,同时阅读我遇到的文档“render”部分:http://jetpack.me/support/infinite-scroll/它使用默认循环,我实际上需要自定义它,它还表示如果我有内容。php文件在我的模板中比我好用,可以省略呈现参数。但是我不知道是什么内容。php文件用于。至于每个帖子的循环和标记,这些都是在我的索引中定义的。php,单个。php和页面。php文件。你能解释一下并举例说明什么内容吗。php页面位于何处以及如何使用。