En principio, bastaría con que crearas la carpeta «woocommerce» dentro del directorio del tema y copiaras dentro de ella el archivo «variation.php».
Hola @almendron ,
Aprecio tu respuesta. Ayudas muchísimo en el foro.
He probado añadiendo el archivo en una estructura de carpetas como indican en la documentación de WooCommerce (eliminando la subcarpeta templates):
themes\storefront\woocommerce\single-product\add-to-cart\variation.php
También lo he intentado como me indicas:
themes\storefront\woocommerce\variation.php
Incluso en la propia raíz del theme activo:
storefront\variation.php
Pero no funciona. Sólo funciona si realizo las modificaciones directamente en WooCommerce.
Por más vueltas que doy no encuentro la forma de hacerlo.
Si te funciona con otros archivos, supongo que el tema ya tiene la función correspondiente o la has añadido tú al archivo «functions.php».
function mytheme_add_woocommerce_support() {
add_theme_support( 'woocommerce' );
}
add_action( 'after_setup_theme', 'mytheme_add_woocommerce_support' );
https://github.com/woocommerce/woocommerce/wiki/Declaring-WooCommerce-support-in-themes
¿Es así?
Exactamente. Se lo añadí al theme twenty-twenty por si acaso, pero es que el theme que uso por defecto es storefront, de WooCommerce 🤷🏼♂️
Estoy por pensar que es un bug de la versión actual de WooCommerce, porque anteriormente funcionaba según Remi: https://remicorson.com/woocommerce-custom-fields-for-variations/
¿Por qué no abres un debate en https://wordpress.org/support/plugin/woocommerce/ ?
De todas formas, voy a comentarlo con los compañeros a ver si pueden reproducir el problema.
Hola @jose-lazo
Lo acabo de probar con el WooCommerce 5.3.0 y el StoreFront 3.6.0 con el directorio siguiente y funciona perfectamente.
themes\storefront\woocommerce\single-product\add-to-cart\variation.php
Asi que deduzco que el template esta en cache y no utiliza el modificado, mete este action add_action( 'woocommerce_init', 'wc_clear_template_cache' );
en el theme por ejemplo y asi fuerzas su eliminacion y comentas.
Hola, @kallookoo
Que va, ni por esas…
Leyendo la documentación de wp.template he visto que básicamente lo que se hace es localizar un script por su ID para reemplazar partes del DOM utilizando su contenido, así que (no me juzguéis por esto) he añadido directamente ese script al header.php, aunque no es la forma de hacerlo 🙁
/**
* Override variation.php
*
* NOTE: it's a wrong way to do this. See doc at https://codex.wordpress.org/Javascript_Reference/wp.template
* @return void
*/
add_action('wp_head', 'override_variation_php');
function override_variation_php()
{
?>
<script type="text/template" id="tmpl-variation-template">
<div class="woocommerce-variation-description"><code>data.variation.variation_description</code></div>
<div class="woocommerce-variation-price"><code>data.variation.price_html</code></div>
<div class="woocommerce-variation-availability"><code>data.variation.availability_html</code></div>
<table class="woocommerce-product-attributes shop_attributes mb-5">
<tbody>
<# if ( data.variation.interfaz ) { #>
<tr class="woocommerce-product-attributes-item">
<th class="woocommerce-product-attributes-item__label"><?php esc_html_e('Interfaz', 'rancilio'); ?></th>
<td class="woocommerce-product-attributes-item__value" data-o_content="N/D"><code>data.variation.interfaz</code></td>
</tr>
<# } #>
<# if ( data.variation.power ) { #>
<tr class="woocommerce-product-attributes-item">
<th class="woocommerce-product-attributes-item__label"><?php esc_html_e('Power', 'rancilio'); ?></th>
<td class="woocommerce-product-attributes-item__value" data-o_content="N/D"><code>data.variation.power</code></td>
</tr>
<# } #>
<# if ( data.variation.watertank ) { #>
<tr class="woocommerce-product-attributes-item">
<th class="woocommerce-product-attributes-item__label"><?php esc_html_e('Water tank', 'rancilio'); ?></th>
<td class="woocommerce-product-attributes-item__value" data-o_content="N/D"><code>data.variation.watertank</code></td>
</tr>
<# } #>
<!-- <# if ( data.variation.ANOTHERFIELD ) { #>
<tr class="woocommerce-product-attributes-item">
<th class="woocommerce-product-attributes-item__label"><?php esc_html_e('ANOTHERFIELD', 'rancilio'); ?></th>
<td class="woocommerce-product-attributes-item__value" data-o_content="N/D"><code>data.variation.ANOTHERFIELD</code></td>
</tr>
<# } #> -->
</tbody>
</table>
</script>
<?php
}
Muchísimas gracias a todos y todas por la ayuda. Estos foros son un pilar fundamental de la Comunidad WordPress.
-
Esta respuesta fue modificada hace 3 años, 10 meses por
Jose Lazo.
Por finalizar esto:
En mi instalación local no funciona la sobreescritura, pero en la web del cliente si :-O
Aún no he encontrado el porqué, pero en instalaciones nuevas si que funciona como debería haber sido al principio.
Espero que sirva a alguien