WPML

Übersicht über das Problem

Das Problem tritt auf, wenn Sie eine Abfrage für zwei Taxonomien haben – ähnlich wie in diesen Beispielen:

http://example.com/?my-category=term&other-category=other-term

http://example.com/other-category/other-term/?my-category=term

http://example.com/my-category/term/?other-category=other-term

Dies führt zu folgendem Fehler:

PHP Catchable fatal error: Object of class WP_Error could not be converted to string in .../wp-content/plugins/sitepress-multilingual-cms/sitepress.class.php on line 4843

Problemumgehung

Dieses Problem ist in WPML 3.4.0 behoben. Ein Update behebt dies auf Ihrer Website, daher benötigen Sie diese Problemumgehung nur, wenn Sie noch nicht aktualisieren können.

Die folgende Problemumgehung funktioniert sowohl für die WPML-Versionen 3.3.6 als auch 3.3.7, aber der Name der Datei, die Sie bearbeiten müssen, unterscheidet sich:

  • Für die WPML-Version 3.3.6 müssen Sie die Datei sitepress.class.php bearbeiten, die sich im Hauptordner des WPML-Plugins befindet.
  • Für die WPML-Version 3.3.7 müssen Sie die Datei class-wpml-seo-headlangs.php bearbeiten, die sich am folgenden Ort befindet: ../sitepress-multilingual-cms/classes/seo/
Suchen Sie nach der Funktion head_langs() (ungefähr in Zeile 4619). Ersetzen Sie diese Funktion durch den folgenden Code:
function head_langs()
{
    $languages = $this->get_ls_languages( array( 'skip_missing' => true ) );
        // If there are translations and is not paged content...

        // Renders head alternate links only on certain conditions
        $the_post = get_post();
        $the_id   = $the_post ? $the_post->ID : false;
        $is_valid = count( $languages ) > 1 
        && !is_paged() 
        && ( ( ( is_single() 
        || is_page() ) 
        && $the_id 
        && get_post_status( $the_id ) == 'publish' ) 
        || ( is_home() 
        || is_front_page() 
        || is_archive() ) );

        if ( $is_valid ) {
            foreach ( $languages as $code => $lang ) {
                if (!is_wp_error($lang[ 'url' ])) { // <<< temp fix
                    $alternate_hreflang = 
                        apply_filters( 'wpml_alternate_hreflang', $lang[ 'url' ], $code );
                    printf( '' . PHP_EOL,
                        $this->get_language_tag( $code ),
                        str_replace( '&', '&', $alternate_hreflang ) 
                    );
            } // <<< temp fix
        }
    }
}
Suchen Sie dann in derselben Datei nach der Funktion render_ls_li_item (ungefähr in Zeile 3319). Ersetzen Sie sie durch den folgenden Code:
public function render_ls_li_item( $lang,
                            $lang_native_hidden = false,
                            $lang_translated_hidden = false,
                            $language_selected = ""
                            ) 
{
    global $icl_language_switcher_preview;
    if (!is_wp_error($lang[ 'url' ])) { //  <<< temp fix
        $country_flag_url = $lang[ 'country_flag_url' ];
        $language_url = apply_filters ( 'WPML_filter_link', $lang[ 'url' ], $lang );
        $language_flag_title = $this->settings[ 'icl_lso_display_lang' ] 
                            ? esc_attr ( $lang[ 'translated_name' ] ) 
                            : esc_attr ( $lang[ 'native_name' ] );
        $ls_settings = 
            $this->get_ls_settings ( $lang, $lang_native_hidden, $lang_translated_hidden );

        $language_selector = 
            '<li class="icl-' . $lang[ 'language_code' ]
                        . '"><a href="' . $language_url . '" ' . $language_selected . '>';

        if ( $this->settings[ 'icl_lso_flags' ] 
            || $icl_language_switcher_preview ):
            $language_selector .= 
                '<img ' . ( !$this->settings[ 'icl_lso_flags' ] 
                    ? 'style="display:none"' : '' )
                              . ' class="iclflag" '
                              . 'src="' . $country_flag_url . '" '
                              . 'alt="' . $lang[ 'language_code' ] . '" '
                              . 'title="' . $language_flag_title . '" /> ';
        endif;

        $ls_settings = $this->get_ls_settings (
            $lang,
            $ls_settings[ 'lang_native_hidden' ],
            $ls_settings[ 'lang_translated_hidden' ]
        );
        $language_selector .= icl_disp_language (
            $ls_settings[ 'lang_native' ],
            $ls_settings[ 'lang_translated' ],
            $ls_settings[ 'lang_native_hidden' ],
            $ls_settings[ 'lang_translated_hidden' ]
        );

        $language_selector
            .= '</a></li>';

        return $language_selector;
    } //  <<< temp fix
}

Alle bekannten Probleme

Tritt dieses Problem weiterhin auf?

Wenn das Update das Problem nicht behebt, stellen Sie eine Support-Anfrage und wir sehen uns das gemeinsam mit Ihnen an.