WPML

סקירת התקלה

הבעיה מופיעה כאשר יש לך שאילתה עבור שתי טקסונומיות – בדומה לדוגמאות אלה:

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

הדבר מוביל לשגיאה הבאה:

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

פתרון עוקף

בעיה זו תוקנה ב־WPML 3.4.0. עדכון פותר זאת באתר שלך, לכן אתה זקוק לפתרון העוקף הזה רק אם עדיין אינך יכול לעדכן.

הפתרון העוקף הבא עובד עבור גרסאות 3.3.6 ו־3.3.7 של WPML, אך שם הקובץ שעליך לערוך שונה:

  • עבור גרסה 3.3.6 של WPML, עליך לערוך את הקובץ sitepress.class.php שנמצא בתיקייה הראשית של התוסף WPML.
  • עבור גרסה 3.3.7 של WPML, עליך לערוך את הקובץ class-wpml-seo-headlangs.php, שנמצא במיקום הבא: ../sitepress-multilingual-cms/classes/seo/
עליך לחפש את הפונקציה head_langs() (בסביבות שורה 4619). החלף פונקציה זו בקוד הבא:
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
        }
    }
}
לאחר מכן, באותו קובץ, חפש את הפונקציה render_ls_li_item (בסביבות שורה 3319). החלף אותה בקוד הבא:
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
}

כל התקלות הידועות

עדיין נתקל בבעיה זו?

אם העדכון אינו פותר זאת, פתח פנייה לתמיכה ואנו נבדוק זאת יחד איתך.