Saltar navegación

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 4 respuestas, tiene 2 voces.

Última actualización por rogerM-13 hace 1 año, 9 meses.

Asistido por: Carlos Rojas.

Autor Entradas
marzo 5, 2023 en 10:35 am #13172771

rogerM-13

Hola! Estoy haciendo una web que utiliza Events Calendar pro con tickets plus y woocommerce.

El tema es que necesitamos el control de las urls y de plantillas customizadas. Con woocommerce tenemos el control de ambas. Así que lo que hemos hecho es que los eventos son "invisibles" y dentro de cada producto se muestra la información de un evento y sus tickets.
Para hacer esta relación lo hemos hecho con ACF con un selector de object y todo funciona perfectamente.

Así que el workflow es: Creas el evento y sus tickets. Creas un producto y le asignas el evento relacionado en el selector de ACF.
Al ver esto el cliente me pidió a ver si se podía crear solo el evento y que se genere automáticamente un producto y ya esté todo relacionado. Esta parte la hice y funcionaba perfectamente. (adjunto 1)

Pero entonces añadí wpml para que la web sea en catalán principalmente y lo que pasó es que se generan productos perfectamente pero sin idioma, de manera que si se quiere editar el producto no te sale en el repositorio de productos de wordpresss. (adjunto 2)

He estado investigando y veo que el tema es que no se genera la fila en la tabla wp_icl_translations. (adjunto 3)

Con la ayuda de chatGPT he visto que hay varios hooks o funciones para atribuirle a un producto el idioma principal, pero al meterlo en mi functions.php de mi child theme, me sale error fatal porqué, según el php_errors.log no existe aun la función de wpml. En este caso he probado las siguientes entre otras: wpml_set_element_language_details() o wpml_update_post_language() (aunque esta última creo que ya no se utiliza)

Mi código simplificado sería este:

// Hook de events calendar en el momento de guardar el evento
add_action( 'tribe_events_event_save', 'bbloomer_create_simple_product_automatically_PROVA', 9 );
function bbloomer_create_simple_product_automatically_PROVA( $event_id ) {
	//Cogemos el ACF de producto relacionado. Si existe no hacemos nada por ahora(porqué os mando el codigo simplificado, pero aqui se actualizara el producto relacionado con la info del evento, el codigo ya me funciona bien)
	$producte_relacionat = get_field('producte_relacionat');
    if ( ! $producte_relacionat && $event_id ) {
        
        // Creamos el nuevo producto, le asignamos el nombre del evento y guardamos
        $product = new WC_Product_Simple();
        $product->set_name( get_the_title( $event_id ) );
        $product->save();

		// Cogemos el id del nuevo producto 
		$new_product_id = $product->get_id();

        error_log('guardat');
        error_log('aqui_estem');
		
		// Asignamos al evento el producto relacionado y escribimos en el campo "producte_relacionat_id" el ID del producto para ver que id tiene el nuevo producto relacionaddo
        update_field('producte_relacionat', $new_product_id , $event_id );
        update_field('producte_relacionat_id', $new_product_id , $event_id );

		// Aqui lo que chatgpt me dice que utilice para añadir el idioma 'ca' pero que me da error fatal
		// Set WPML language details after WPML has loaded
        add_action( 'wp_loaded', function() use ( $new_product_id ) {
            wpml_set_element_language_details( $new_product_id, 'post_product', null, 'ca', true );
        } );
    }
}

Como sería la forma para hacer que se le atribuya al nuevo producto el idioma por defecto de la web o uno especifico?

Si no también he pensado (y probado pero no me funciona) que en vez de hacerlo todo aquí, en este hook, se podría crear otro hook que al guardar un producto de woocommerce le añada el idioma si no lo tiene. Al final solo se utilizará un idioma (catalan) así que me serviría que cada vez que se crea un producto se le atribuye el idioma 'ca'.

Otro dato que quizás ayude es:
Como veis en el adjunto 2, se crean productos en el total pero no dentro de un idioma. Pero si voy directamente a la url del nuevo producto con su id sin ponerle idioma en la url (enlace oculto, el id es el del nuevo producto del ajunto 1) (adjunto 4) ni guardar ni nada, solo abriendo la página de edición y cerrándola entonces si que aparece el producto (addjunto 5) y se genera la fila en la tabla wp_icl_translations. (adjunto 6)

He buscado info pero no he encontrado nada, por eso he ido a chatGPT antes de molestaros pero no hay manera de que me funcione. Espero que me podáis ayudar porqué es bastante vital que funcione para el cliente!

Muchísimas gracias!!!!!

PD: Otro tema que acabo de ver que no se si puede tener relación es que cuando he ido a buscar la info de depuración para enviaroslo en este ticket, he visto que me dice que no tengo instalado el WooCommerce Multilingual (adjunto 7) pero en verdad si que está instalado (adjunto 8)

8. woo multilingual si instalado.png
7. woo multilingual not instaled.png
6. base de datos con el id del nuevo producto.png
5. pagina de productos donde aparece el nuevo producto.png
4. edicion de post del nuevo producto .png
3. base de datos con el id del nuevo evento pero sin el producto.png
2- no aparece en productos.png
1- producto relacionado y su id.png
marzo 6, 2023 en 10:01 am #13176999

Carlos Rojas
Supporter

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

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

Hola,
Muchas gracias por contactarnos

La respuesta a su problema necesita de código personalizado y por lo tanto -desafortunadamente- cae fuera del alcance de nuestros servicio de soporte. Sin embargo le recomiendo que le eche un vistazo a nuestro listado de hooks: https://wpml.org/documentation/support/wpml-coding-api/wpml-hooks-reference/

En caso de necesitar más asistencia le recomiendo que considere consultar a uno de nuestros partners certificados en este enlace: https://wpml.org/contractors/ Ellos estarán más que contentos de poder ayudarle.

Saludos,
Carlos

marzo 6, 2023 en 10:26 am #13177467

rogerM-13

Hola! Gracias por contestar!

No estoy pidiendo el código definitivo customizado para mi. Estoy pidiendo, a poder ser, esto:
1. Respuesta a porqué no se genera la fila en la tabla wp_icl_translations
2. Hay alguna función o hook para generar la fila en la tabla wp_icl_translations
3. Si hay alguna función o hook para atribuirle el idioma deseado a un producto en concreto
4. Si hay alguna función o hook para atribuir el idioma deseado a todos los productos

Revisaré la página que has mandado con el listado de todos los hooks pero si puedes ser más preciso con alguno que me ayude a solucionar los puntos anteriores lo agradecería!

Muchas gracias!

marzo 6, 2023 en 10:37 am #13177519

Carlos Rojas
Supporter

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

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

Hola,

Lo siento pero no puedo ser más específico porque estamos hablando de código personalizado y como mencionaba en mi mensaje anterior, cae fuera del alcance de nuestro servicio de soporte.

Saludos,
Carlos

marzo 6, 2023 en 10:39 am #13177521

rogerM-13

Vale, pues seguiré investigando, gracias!