Saltar navegación

Este hilo está resuelto. Aquí tienes una descripción del problema y la solución.

Problema:
El cliente está intentando eliminar el slug '/portfolio-item/' de su sitio web multilingüe y ha añadido código personalizado en el archivo functions.php para modificar los permalinks y ajustar el selector de idioma de WPML. Sin embargo, el selector de idioma no funciona correctamente y elimina el prefijo '/ca/' para el idioma catalán, resultando en un error 404.
Solución:
1. Modificar el código para ajustar el selector de idioma de WPML. Aquí está el código recomendado que no hemos probado, pero podría ser útil:

function fix_wpml_disabled_switcher($languages) {<br />    global $post;<br />    if ($post && $post->post_type == 'portfolio') {<br />        foreach ($languages as $lang_code => $lang_info) {<br />            $translated_id = apply_filters( 'wpml_object_id', $post->ID, 'portfolio', false, $lang_code );<br />            if ($translated_id) {<br />                $languages[$lang_code]['url'] = get_permalink($translated_id);<br />            }<br />        }<br />    }<br />    return $languages;<br />}<br />add_filter('icl_ls_languages', 'fix_wpml_disabled_switcher');

2. Incrementar el límite de memoria de WordPress a un mínimo de 128Mb. Agregar el siguiente código en el archivo wp-config.php:

/* Memory Limit */<br />define('WP_MEMORY_LIMIT', '128M');

Si la solución propuesta no resuelve el problema o si el código es irrelevante debido a actualizaciones o diferencias en la configuración, recomendamos abrir un nuevo ticket de soporte. También es aconsejable revisar los problemas conocidos y confirmar que se han instalado las últimas versiones de los temas y plugins. Si necesita asistencia adicional, puede contactar a nuestros partners certificados en https://wpml.org/contractors/.

Este es el foro de soporte técnico de WPML, el plugin multilingüe de WordPress.

Todas las personas pueden leerlo pero solo los clientes de WPML pueden ingresar comentarios. El equipo de WPML responde en los foros 6 días a la semana, 22 horas por día.

Etiquetado: 

Este tema contiene 1 respuesta, tiene 0 voces.

Última actualización por Carlos Rojas hace 1 mes.

Asistido por: Carlos Rojas.

Autor Publicaciones
junio 2, 2025 a las 6:10 pm #17099202

carlesF-5

Antecedentes del problema:
Estoy intentando eliminar el slug '/portfolio-item/' del portfolio en mi sitio web que está en catalán y castellano. He añadido un código en el archivo functions.php del tema child (el tema es essencials) para lograr esto. El código incluye funciones para eliminar el slug del portfolio, cambiar la estructura del permalink, arreglar manualmente el selector de idioma de WPML, y forzar el flush de las reglas de reescritura. Aquí está el código que estoy usando: <?php function child_theme_enqueue_styles() { wp_enqueue_style( 'parent-style', get_template_directory_uri() . 'https://cdn.wpml.org/style.css' ); wp_enqueue_style( 'child-style', get_stylesheet_directory_uri() . 'https://cdn.wpml.org/style.css', array('parent-style') ); } add_action( 'wp_enqueue_scripts', 'child_theme_enqueue_styles' ); function remove_portfolio_slug() { global $wp_rewrite; add_rewrite_rule( '^([^/]+)/?$', 'index.php?portfolio=$matches[1]', 'top' ); } add_action('init', 'remove_portfolio_slug'); function custom_portfolio_permalink($post_link, $post) { if ($post->post_type == 'portfolio') { return home_url('/' . $post->post_name . '/'); } return $post_link; } add_filter('post_type_link', 'custom_portfolio_permalink', 10, 2); function fix_wpml_disabled_switcher($languages) { global $post; if ($post && $post->post_type == 'portfolio') { foreach ($languages as $lang_code => $lang_info) { if ($lang_code == 'ca') { $languages[$lang_code]['url'] = home_url('/ca/' . $post->post_name . '/'); } else { $languages[$lang_code]['url'] = home_url('/' . $post->post_name . '/'); } } } return $languages; } add_filter('icl_ls_languages', 'fix_wpml_disabled_switcher'); function flush_portfolio_rewrite_rules() { remove_portfolio_slug(); flush_rewrite_rules(); } register_activation_hook(__FILE__, 'flush_portfolio_rewrite_rules'); ?>

Síntomas:
El selector de idioma no funciona correctamente porque también elimina el prefijo '/ca/' del idioma catalán, lo que resulta en un error 404. Por ejemplo, el slug 'enlace oculto' debería enlazar al catalán como 'enlace oculto', pero en su lugar enlaza a 'enlace oculto'.

Preguntas:
¿Cómo puedo mantener el prefijo '/ca/' en las URLs en catalán mientras elimino el slug '/portfolio-item/'?
¿Hay una manera de ajustar el código para que el selector de idioma de WPML funcione correctamente?

junio 3, 2025 a las 6:32 am #17100092

Carlos Rojas
Partidario de WPML desde 03/2017

Idiomas: Inglés (English ) Español (Español )

Zona horaria: Europe/Madrid (GMT+02:00)

Hola,
Muchas gracias por contactarnos

1.- Como la causa de este problema está en el código personalizado que ha añadido, entonces la solución cae fuera del alcance de nuestro servicio de soporte.

Aún así, le he preguntado a ChatGPT por una solución de código y ha recomendado este que no he probado pero que le puede ser útil:

function fix_wpml_disabled_switcher($languages) {
    global $post;
    if ($post && $post->post_type == 'portfolio') {
        foreach ($languages as $lang_code => $lang_info) {
            $translated_id = apply_filters( 'wpml_object_id', $post->ID, 'portfolio', false, $lang_code );
            if ($translated_id) {
                $languages[$lang_code]['url'] = get_permalink($translated_id);
            }
        }
    }
    return $languages;
}
add_filter('icl_ls_languages', 'fix_wpml_disabled_switcher');

Si sigue necesitando asistencia con este problema le recomiendo que contacte a uno de nuestros partners certificados en este enlace: https://wpml.org/contractors/ y ellos estarán más que dispuestos a ayudarle.

2.- Por favor incremente el límite de memoria de WordPress. El mínimo requerido es de 128Mb: https://wpml.org/home/minimum-requirements/
Para ello puede agregar el siguiente código al archivo wp-config.php que se encuentra en la raíz del sitio:

/* Memory Limit */
define('WP_MEMORY_LIMIT', '128M');

- Añádelo encima de la línea /* That's all, stop editing! Happy blogging. */

Puede comprobar el límite de memoria de WordPress en WPML -> Soporte

Saludos,
Carlos