Soporte » Plugins y Hacks » WooCommerce » Sobreescribir el archivo variation.php

  • Resuelto Jose Lazo

    (@jose-lazo)


    Hola,

    Estoy tratando de sobreescribir un archivo de WooCommerce de la forma tradicional (añadiéndolo al theme) pero no lo reconoce. He probado con varios themes y nada. He probado lo mismo con otros archivos de WooCommerce y sí que lo hace, pero con este concretamente no:

    wp-content\plugins\woocommerce\templates\single-product\add-to-cart\variation.php

    Entiendo que al usar wp.template será distinto, pero no consigo hacerlo funcionar.

    Si sobreescribo ese archivo directamente en WooCommerce sí que funciona.

    ¿Sabéis cómo puedo sobreescribirlo?

    Un saludo y gracias

Viendo 8 respuestas - de la 1 a la 8 (de un total de 8)
  • Moderador almendron

    (@almendron)

    En principio, bastaría con que crearas la carpeta «woocommerce» dentro del directorio del tema y copiaras dentro de ella el archivo «variation.php».

    Iniciador del debate Jose Lazo

    (@jose-lazo)

    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.

    Moderador almendron

    (@almendron)

    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í?

    Iniciador del debate Jose Lazo

    (@jose-lazo)

    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/

    Moderador almendron

    (@almendron)

    ¿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.

    Moderador kallookoo

    (@kallookoo)

    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.

    Iniciador del debate Jose Lazo

    (@jose-lazo)

    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 2 años, 10 meses por Jose Lazo.
    Iniciador del debate Jose Lazo

    (@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

Viendo 8 respuestas - de la 1 a la 8 (de un total de 8)
  • El debate ‘Sobreescribir el archivo variation.php’ está cerrado a nuevas respuestas.