Невозможно использовать объект типа WP Error в качестве массива


Использование плагина 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 );
                            }
                        }

В другом потоке Я читал о похожей проблеме, но не совсем такой, когда плагин пытался получить доступ к объекту в виде массива. Есть идеи, как я мог бы это решить?

Author: Community, 2015-03-04

1 answers

Что ж, довольно ясно, почему возникает эта проблема.

Давайте посмотрим на wp_insert_term документацию:

Возвращаемые Значения

(массив|ошибка WP_Error) Идентификатор термина и Идентификатор таксономии термина. (Пример: массив ('term_id'=>12,'term_taxonomy_id'=>34))

Как вы можете видеть, при успешном выполнении эта функция возвращает массив. Но... Если произойдет какая-либо ошибка, он вернет объект типа WP_Error.

Итак... Эта фатальная ошибка возникает, потому что 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.

 2
Author: Krzysiek Dróżdż, 2015-03-04 06:55:56