1

为什么如果我从 functions.php 中调用自定义函数它不起作用?

我的自定义功能:

function get_cat_slug($ID) {
    $post_id = (int) $ID;
    $category = &get_category($post_id);
    echo $category->slug;
}

循环遍历所有帖子,如下所示:

$args = array(
 'numberposts' => -1
);  
$posts = get_posts($args);
foreach ($posts as $post){
   // and withing this lopp I would like to get a category slug
   // so I am calling my custom function, also included in functions.php
   get_cat_slug($post->ID);

}

但是,get_cat_slug($post->ID)总是返回null。为什么?我错过了什么?任何建议都非常感谢。

4

2 回答 2

2

get_category 之前绝对不能有 & 符号,它实际上需要Category ID 而不是 post ID。)

get_the_category返回一个类别数组(因为帖子可以有多个),您也不需要指定 (int)。如果您只想呼应第一只猫的蛞蝓(假设为单一分类),请尝试:

function get_cat_slug($post_id) {
  $cat_id = get_the_category($post_id);
  $category = get_category($cat_id[0]);
  echo $category->slug;
}

但是,遵循 wordpress 函数样式,如果你用 命名你的函数get_...,它应该return $category->slug而不是echo它,这意味着你必须echo get_cat_slug($post->ID);在你的模板循环中。

您的循环依赖于 WP_Query,它属于模板文件而不是 functions.php。哪个模板文件取决于您的循环服务的目的以及您希望在哪里显示它。index.php 是主帖子循环的逻辑选择,尽管 archive.php、single.php 或任何预先存在的特定于主题的模板可能有意义,就像您创建的任何自定义、非标准模板一样。

于 2012-09-08T22:27:36.690 回答
1

可能是你的演员应该是

$post_id = intval($ID);

参考

您是否尝试过记录每一步?所以你可以准确地看到哪里出错了

于 2012-09-08T22:21:28.037 回答