不能将WP_ERROR类型的对象用作数组

时间:2015-03-04 作者:rhand

使用WordPress插件WPML 我在保存草稿时遇到以下错误:

PHP Fatal error:  Cannot use object of type WP_Error as array in /home/user/domain.com/wp-content/plugins/sitepress-multilingual-cms/inc/taxonomy-term-translation/wpml-term-translations.class.php on line 1018
在那条线上我有

    $new_term = wp_insert_term( $term_name, $taxonomy, array( \'slug\' => self::term_unique_slug( sanitize_title( $term_name ), $taxonomy, $post_lang ) ) );
if ( isset( $new_term[ \'term_taxonomy_id\' ] ) ) {
                                $ttid_in_correct_lang = $new_term[ \'term_taxonomy_id\' ];
                                $trid                 = false;
                                if ( $bulk ) {
                                    $trid = $sitepress->get_element_trid( $ttid, \'tax_\' . $taxonomy );
                                }
                                $sitepress->set_element_language_details( $ttid_in_correct_lang, \'tax_\' . $taxonomy, $trid, $post_lang );
                            }
                        }
在另一个thread 我读到了一个类似的问题,但与插件试图以数组的形式访问对象的情况不同。你知道我该怎么解决这个问题吗?

1 个回复
最合适的回答,由SO网友:Krzysiek Dróżdż 整理而成

很明显,为什么会出现这个问题。

让我们看看wp_insert_term 文件:

Return Values

(array | WP\\u Error)术语ID和术语分类ID。(示例:array(\'Term\\u ID\'=>12,\'Term\\u Taxonomy\\u ID\'=>34))

如您所见,如果成功,此函数将返回数组。但是如果发生任何错误,它将返回WP\\U错误类型的对象。

所以发生此致命错误的原因是wp_insert_term 以错误结束,其余代码无法正确处理。

解决此问题的简单方法是在if语句中添加另一个条件,如下所示:

$new_term = wp_insert_term( $term_name, $taxonomy, array( \'slug\' => self::term_unique_slug( sanitize_title( $term_name ), $taxonomy, $post_lang ) ) );
if ( !is_wp_error($new_term) && isset( $new_term[ \'term_taxonomy_id\' ] ) ) {
    ...
但这并不能解决真正的问题,即wp_insert_term 呼叫

结束

相关推荐