如何检查插件中是否不存在分类

时间:2016-03-03 作者:Mailmulah

我制作了2个插件(插件A和插件B/自定义帖子类型)插件A上的一些模块需要从插件B调用分类法。当两个插件都处于活动状态时,一切正常,但当插件B停用时,我收到了以下通知:

注意:正在尝试获取D:\\MYWEB\\InstantWP\\U 4.3.1\\iwpserver\\htdocs\\wordpress\\wp content\\plugins\\NYPLUGIN\\myplugin中非对象的属性。php在线50

第50行如下所示:

$option_value_event[] .= $cat->name;
代码如下:

 //Get all EVENT categories
 $args = array(
        \'type\'                     => \'post\', 
        \'child_of\'                 => 0, 
        \'parent\'                   => \'\', 
        \'orderby\'                  => \'date\', 
        \'order\'                    => \'ASC\', 
        \'hide_empty\'               => 1, 
        \'hierarchical\'             => 1, 
        \'exclude\'                  => \'\', 
        \'include\'                  => \'\', 
        \'number\'                   => \'\', 
        \'taxonomy\'                 => \'catevent\', 
        \'pad_counts\'               => false 
 ); 
 $categories_event = get_categories($args);
 $option_value_event = array();

 //Extract all EVENT categories
 foreach ( $categories_event as $cat ){ 
 $option_value_event[] .= $cat->name;
 }
有时我的用户不想使用插件B。有没有办法在不中断插件A的情况下停用插件B?

是否有快速解决这些错误的方法?

非常感谢您的帮助

非常感谢。

2 个回复
最合适的回答,由SO网友:Pieter Goosen 整理而成

你要么需要做两件事

检查是否有空数组AND A.WP_Error 对象

检查分类是否存在get_categories()get_terms() 在执行代码并仍然检查空数组之前

需要考虑的注释很少get_categories() 使用get_terms(), 你可以用get_terms()

如果使用默认值,则无需设置参数

  • date 不是的有效值orderby 在里面get_terms(). 有效值为name, slug, term_group, term_id, id, descriptioncount

    type 中的参数get_categories() 与post类型无关,但与分类法类型相关。此参数用于接受link 在WordPress 3.0中引入自定义分类法之前的值和使用位置。在WordPress 3.0之前,您可以设置typelink 从返回条款link_category 分类学WordPress 3.0中对该参数进行了折旧,以支持taxonomy 参数

    溶液

    //Get all EVENT categories
    $categories_event = get_terms( \'catevent\' );
    
    $option_value_event = array();  
    
    // Check for empty array and WP_Error
    if (    $categories_event
         && !is_wp_error( $categories_event )
    ) {
        //Extract all EVENT categories
        foreach ( $categories_event as $cat ){ 
            $option_value_event[] = $cat->name;
        }
    }
    
    编辑我不明白为什么上面的代码不能工作。你可以试试下面的测试

    if ( taxonomy_exists( \'catevent\' ) ) {
        //Get all EVENT categories
        $categories_event = get_terms( \'catevent\' );
    
        $option_value_event = array();  
    
        // Check for empty array and WP_Error
        if (    $categories_event
             && !is_wp_error( $categories_event )
        ) {
            //Extract all EVENT categories
            foreach ( $categories_event as $cat ){ 
                $option_value_event[] = $cat->name;
            }
        }
    }
    
    这应该是可行的,如果不行,那么您的某个插件中有一个严重错误

  • SO网友:Howdy_McGee

    一个简单的解决方案是检查返回的内容是否为空。在进行任何类型的连接或求值之前,请始终加入这些条件,以确保您拥有所需的条件。一个简单的PHP函数,如is_empty() 应满足以下条件:

    //Get all EVENT categories
    $args = array(
            \'type\'                     => \'post\', 
            \'child_of\'                 => 0, 
            \'parent\'                   => \'\', 
            \'orderby\'                  => \'date\', 
            \'order\'                    => \'ASC\', 
            \'hide_empty\'               => 1, 
            \'hierarchical\'             => 1, 
            \'exclude\'                  => \'\', 
            \'include\'                  => \'\', 
            \'number\'                   => \'\', 
            \'taxonomy\'                 => \'catevent\', 
            \'pad_counts\'               => false 
    ); 
    $categories_event       = get_categories( $args );
    $option_value_event     = array();
    
    //Extract all EVENT categories
    if( ! empty( $categories_event ) ) {
        foreach( $categories_event as $cat ) { 
            $option_value_event[] .= $cat->name;
        }
    }