Skip Navigation

This thread is resolved. Here is a description of the problem and solution.

Problema: Deseo duplicar en masa muchos artículos y páginas

Solución: Puedes ir a WPML > Translation Management > Elige todos los elementos que deseas duplicar y en la misma página selecciona "duplicar" en vez de traducir.

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: 

This topic contains 8 respuestas, has 2 mensajes.

Last updated by Aitor Méndez hace 3 meses, 2 semanas.

Assigned support staff: Alejandro.

Autor Mensajes
abril 22, 2020 a las 4:36 pm #5970545

Aitor Méndez

Hola, estoy tratando de configurar una main query con pre_get_posts. Funciona en el idioma principal (español), pero no en el secundario (inglés).

Al principio lo intenté con el term slug, pero viendo este post:

https://wpml.org/errata/functions-tax_query-and-get_term_by-return-false-for-slug-and-name-parameters/

lo he intentado con el term_id traducido, tal como indico a continuación, pero sigue sin funcionar.


add_action('pre_get_posts', function ($query) {
    if ( ! is_admin() && is_post_type_archive( 'cv' ) && $query->is_main_query() ) {
        $t = get_term_by('slug', 'bibliografia', 'exhibition');

        $query->set( 'nopaging', true );
        $query->set('tax_query', [
            'relation' => 'AND',
            [
              'taxonomy' => 'exhibition',
              'field'    => 'term_id',
              'terms'    => $t->term_id,
              'operator' => 'NOT IN',
            ],
            [
                'taxonomy' => 'collective',
                'field'    => 'slug',
                'terms'    => 'democracia',
            ],
        ],);
        return;
    }
});

La página web es un CPT llamado "cv" y la main query debe excluir los posts con el term "bibliografia" de la taxonomía "exhibition". Pero no se excluyen en el idioma secundario.

Se puede ver el resultado en esta página en pruebas:

hidden link
hidden link

INFO SOBRE CÓMO SE CONSTRUYE LA PÁGINA

1) El template es archive-cv.php, que usa la main query para recoger los años presentes en las distintas entradas y construir un array con todos los años. Este es el loop concretamente:

hidden link

Y este es el pre_get_posts() que tiene que excluir las entradas con el term "bibliografia" en la taxonomía "exhibition":

hidden link

2) Tras construir el array con todos los años, se ejecutan nuevas wp_query para cada año presente en el array con un for_each:

hidden link

como puede verse al final de la página en inglés:

hidden link

aparece el año 2008, porque no se ha excluido en la main_ query el post de 2008 con el term bibliografia y, consecuentemente, se ha añadido el año 2008 al array.

En resumen, todo indica que no está funcionando la tax_query del pre_get_post().

Como información adicional, incluyo un var_dump del term_id, para comprobar que lo recojo en su versión traducida correctamente. Es lo que aparece arriba del todo de la página:

int(37) object(WP_Term)#500 (10) { ["term_id"]=> int(37) ["name"]=> string(12) "Bibliography" ["slug"]=> string(12) "bibliography" ["term_group"]=> int(0) ["term_taxonomy_id"]=> int(37) ["taxonomy"]=> string(10) "exhibition" ["description"]=> string(0) "" ["parent"]=> int(0) ["count"]=> int(0) ["filter"]=> string(3) "raw" }

hidden link

El term_id es 33 para español y 37 para inglés, con lo que se comprueba que está correctamente recogido al traducir.
Agradecería cualquier ayuda.

abril 23, 2020 a las 7:30 am #5973953

Aitor Méndez

Hola, en la portada de soporte aparece este ticket como respondido, pero me meto en él y no hay ninguna respuesta.

abril 23, 2020 a las 12:41 pm #5977159

Alejandro
Supporter

Languages: Inglés (English ) Español (Español ) Italiano (Italiano )

Timezone: Europe/Rome (GMT+02:00)

Hola, puede que haya sido un pequeño bug, pero en realidad a mi me aparece como asignado, así que no te preocupes.

Te aviso que este ticket cae en la categoría de código personalizado, por lo que puedo ayudarte con las cosas de WPML, pero no haciendo debug a tu código.

Tengo el presentimiento de que el problema pueda estar aquí:

is_post_type_archive( 'cv' )

Aquí puedo imaginar 2 cosas:

1) El post type no se ha traducido y por lo tanto WordPress regresa el post type en el idioma original.

2) El post type se tradujo pero el filtro no prevee el nuevo post type slug y por lo tanto nunca va a regresar la información correcta.

Podrías hacer un test revisando los condicionales y que es lo que te regresa en cada uno, para saber si por casualidad encontramos otra pista de lo que sucede?

Gracias.

abril 23, 2020 a las 2:07 pm #5977967

Aitor Méndez

Muchas gracias por tu ayuda, Alejandro. He averiguado lo siguiente:

1) El post type está marcado para que "parezca traducido". Es decir, queremos que se vean los posts en inglés, pero que sean iguales que en español.

2) Si sustituyo is_post_type_archive( 'cv' ) por is_archive( ) o, incluso, si lo elimino completamente dejando que pre_get_posts() actue sobre todas las queries el resultado sigue siendo el mismo: no funciona la tax_query en el idioma secundario.

3) Si marco el posts como traducible, la tax_query parece funcionar como se espera. Sólo funciona mal con el post_type marcado para que parezca traducido.

Tiene toda la pinta de un bug de WPML, ya me dirás.

Muchas gracias.

abril 23, 2020 a las 5:19 pm #5980055

Alejandro
Supporter

Languages: Inglés (English ) Español (Español ) Italiano (Italiano )

Timezone: Europe/Rome (GMT+02:00)

Hola, ok, creo entender que es lo que pasa.

Esa opción que mencionas tiene solo un defecto: Los Filtros.

esto mismo que mencionas, pasa si tu tienes productos sin traducir y tratas de filtrarlos por algo como categorias, etc.

Si no me equivoco, para que se puedan mostrar los elementos en los diferentes idiomas, se crea como una condición que te permite hacerlo pero eso a su vez invalida los filtros (no te sabría decir especificamente por qué pero es algo que es necesario para poder mostrar entradas de un idioma en otro) así que para resolver tu problema, lo único que puedes hacer es duplicar los elementos, y para ello debes tener la opción "traducible - Mostrar solo elementos traducidos".

Así podrás tener todo funcionando correctamente.

abril 23, 2020 a las 6:04 pm #5980553

Aitor Méndez

Gracias, Alejandro. Parece entonces que he llegado a un callejón sin salida. No puedo usar la opción de que parezca traducido. Y en este caso es importante, porque serán cientos de entradas con muy poco contenido cada una, que será necesario duplicar de forma manual en el idioma secundario a pesar de no tener contenido distinto. Pero si no hay más opción, doy el ticket por cerrado.

Te agradezco mucho tu atención y aclaraciones.

Un saludo.

abril 23, 2020 a las 6:31 pm #5980659

Alejandro
Supporter

Languages: Inglés (English ) Español (Español ) Italiano (Italiano )

Timezone: Europe/Rome (GMT+02:00)

Hola, si el problema es por la cantidad, puedes siempre usar nuestro sistema de duplicación en masa.

Para hacerlo basta ir a WPML > Translation Management > Elige todos los elementos que deseas duplicar y en la misma página selecciona "duplicar" y ya, estarán duplicados sin tanto problema.

Es lo único que te puedo recomendar en este caso.

Espero te sea de ayuda.

abril 23, 2020 a las 6:33 pm #5980665

Aitor Méndez

Sí me ayuda. No conocía esa opción. Muchas gracias.

(tengo que reabrir el tiquet, ahora lo cierro de nuevo)

abril 23, 2020 a las 6:34 pm #5980669

Aitor Méndez

My issue is resolved now. Thank you!