我制作了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?
是否有快速解决这些错误的方法?
非常感谢您的帮助
非常感谢。
最合适的回答,由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
, description
和count
在type
中的参数get_categories()
与post类型无关,但与分类法类型相关。此参数用于接受link
在WordPress 3.0中引入自定义分类法之前的值和使用位置。在WordPress 3.0之前,您可以设置type
到link
从返回条款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;
}
}