修复不应该修复的警告

时间:2017-09-19 作者:Locke

我试图修正一些警告,我注意到我经常

PHP Notice:  Undefined variable:
如果我使用:

$categories = get_the_category(get_query_var(\'cat\'));
$cat_name = $categories[0]->slug;
或/带有

$categories = get_category(get_query_var(\'cat\'));
$category_id   = $categories->term_id;
$category_slug = $categories->slug;
$title_page    = $categories->name;
我在循环或条件中使用它

例如:

$args1 = array(
  \'no_found_rows\' => true,
  \'update_post_meta_cache\' => false,
  \'update_post_term_cache\' => false,

  \'category__in\' => array($category_id),
  \'posts_per_page\' => 2,
  \'ignore_sticky_posts\' => true,

  \'post_type\' => \'any\'
);
或/和

} else if (has_category($cat_name) && is_single()  && 
!is_singular(\'my_post_type\')){
我总是会得到调试模式为真的那种警告

所以我开始着手解决这个问题,以找到某种解决方案,我注意到我真的不太明白get_the_category();get_category();

然后我试着:

$cat0 = get_category( get_query_var(\'cat\'));

if(isset($cat0)) {

    $cat1 = get_category(get_query_var(\'cat\'));

    $category_id   = $cat1->term_id;
    $category_slug = $cat1->slug;
    $title_page    = $cat1->name;
}
或/和

$cat4 = get_the_category(get_query_var(\'cat\'));


    if(!isset($cat4)){
        $categories = get_the_category(get_query_var(\'cat\'));
        $cat_name = $categories[0]->slug;
    }

    if(isset($cat4) && is_single()){
        $categories = get_the_category(get_query_var(\'cat\'));
        $cat_name = $categories[0]->slug;
    }
但如果get_categoryget_the_category 在里面== NULL

我会再来一次PHP Notice: Undefined variable: cat_name

我错过了什么?

1 个回复
SO网友:Jacob Peattie

所以这里有两件事。首先get_the_category() 不接受类别ID作为参数。它接受一个post ID,可以从中获取类别。

根据您需要使用的代码判断get_category():

$category = get_category( get_query_var(\'cat\') );
另一个问题是,您似乎正在使用$cat_name 没有检查你是否真的有一个类别。

例如:

$category = get_category( $nonexistant_cat_id );

if ($category) {
    $cat_name = $category->slug;
}

echo $cat_name; // Will be an undefined variable;
在那个例子中$cat_name 没有设置,因为get_category() 未返回类别。所以你只能使用$cat_name 如果get_category() 返回了一个类别:

$category = get_the_category( $nonexistant_cat_id );

if ($category) {
    $cat_name = $category->slug;
    echo $cat_name; // No longer undefined variable;
}
或者在您的示例中,只需检查$cat_name 在使用前的条件下设置$cat_name:

} else if (isset($cat_name) && has_category($cat_name) && is_single()  && 
!is_singular(\'my_post_type\')){
将其描述为“不必要”修复的错误是不正确的。您的代码中有几个问题需要解决。

结束