Resumen del problema
El problema aparece cuando tiene una consulta para dos taxonomías, similar a estos ejemplos:
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
Esto provoca el siguiente error:
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
Solución alternativa
Este problema se ha solucionado en WPML 3.4.0. Actualizar lo soluciona en su sitio, por lo que solo necesita esta solución alternativa si aún no puede actualizar.
La siguiente solución alternativa funciona tanto para las versiones 3.3.6 como 3.3.7 de WPML, pero el nombre del archivo que debe editar es diferente:
- Para la versión 3.3.6 de WPML, debe editar el archivo sitepress.class.php que se puede encontrar en la carpeta principal del plugin WPML.
- Para la versión 3.3.7 de WPML, debe editar el archivo class-wpml-seo-headlangs.php, que se puede encontrar en la siguiente ubicación: ../sitepress-multilingual-cms/classes/seo/
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
}
}
}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
}