函数在wordpress functions.php中输出空值,但在从另一个页面调用时起作用

时间:2013-08-01 22:06:48

标签: php wordpress

function get_people_cats($taxonomy) {

    $output = ''; 
    $terms = get_terms($taxonomy);
    $count = count($terms);
    if ( $count > 0 ):
        foreach ( $terms as $term ):
            $output .= "'". $term->name ."'". '=>';
            $output .= "'". $term->term_id."',";
        endforeach;
    endif;
    return $output; 
}

此函数返回自定义分类的列表,如果在模板中调用该函数,则会找到哪些单词。但我想将函数值赋给functions.php中的变量,而它什么也没有返回。

3 个答案:

答案 0 :(得分:0)

试试这个,在我的本地站点上的functions.php文件中正常工作:

function get_people_cats( $taxonomy ) {

    $output = ''; 
    $terms = get_terms( $taxonomy );
    $count = count( $terms );
    if ( $count > 0 ):
        foreach ( $terms as $term ):
            $output .= $term->name.'=>'.$term->term_id;
        endforeach;
    endif;
    return $output; 
}

echo get_people_cats('category');

答案 1 :(得分:0)

如果您没有收回条款,可能是由于分类标准的注册位置。如果它在初始化钩子中注册,那么您可能会在分类法实际注册之前尝试将它们打印出来。

您可以使用以下方法对其进行测试:

function get_people_cats( $taxonomy ) {
    $output = ''; 
    $terms = get_terms('category');
    $count = count( $terms );
    if ( $count > 0 ):
        foreach ( $terms as $term ):
            $output .= $term->name.'=>'.$term->term_id;
        endforeach;
    endif;
    return $output; 
}

function echo_cats() { 
    echo get_people_cats('taxonomy_name', array('hide_empty' => 0) );
}

add_action('wp_footer', 'echo_cats'); 

通过挂钩到wp_footer,直到任何可能已经注册了分类法的插件之后才会被调用。

// UPDATE //

知道了。要创建数组,请执行以下操作:

$terms = get_terms($taxonomy, array('hide_empty' => false) );
if( !is_wp_error( $terms ) ) {
    foreach( $terms as $term ) {
         $types[$term->term_id] = $term->name;
    }
} 
return $types;   
}

这将为您提供一个$term->id => $term->name --数组,您可能希望根据您使用数组的方式进行反转。

答案 2 :(得分:0)

如果您的分类法实际上是使用插件创建的,而不是在您的functions.php中使用代码创建它们,那么get_terms的结果将是空的,直到分类法已经启动,这在插件级别启动时更好,最有可能使用' init'book,所以你必须在钩子之后挂钩你的函数并且只在你的主题模板文件中使用它(不在functions.php中)你基本上做了类似的事情:

add_action('init', 'get_people_cats', 9999);

然后你会称之为正常:$cats = get_people_cats('person_category');

希望这能解决你的问题(我知道在遇到这个问题时我花了大约一个小时来解决这个问题。)