Un utente ha chiesto
Categoria: Twenty Nineteen di WordPress
Domanda: Come sostituire woocommerce “class-wc-twenty-nineteen.php” nel tema figlio

Ciao

Sto usando il mio tema figlio (da Twenty Nineteen) per il mio negozio online con woocommerce.

Vorrei modificare la larghezza dei miei prodotti “immagine principale”. È impostato su 450 px e vorrei impostarlo su 600 px.

Ho letto molte discussioni su problemi simili ed ecco cosa ho imparato:

1) Dovrei essere in grado di personalizzare questa larghezza in Aspetto> Personalizza> WooCommerce> Immagini prodotto ma l’opzione non viene visualizzata qui.

2) Questo perché il mio tema principale (Twenty Nineteen) ha dichiarato il supporto per WooCommerce e ha impostato queste impostazioni da solo. E in tal caso, le impostazioni vengono rimosse dal personalizzatore.

3) Dopo un po’ ho scoperto dove erano impostate queste impostazioni: in /wp-content/plugins/woocommerce/includes/theme-support/class-wc-twenty-nineteen.php :

<?php
/**
 * Twenty Nineteen support.
 *
 * @since   3.5.X
 * @package WooCommerce/Classes
 */

defined( 'ABSPATH' ) || exit;

/**
 * WC_Twenty_Nineteen class.
 */
class WC_Twenty_Nineteen {

	/**
	 * Theme init.
	 */
	public static function init() {

		// Change WooCommerce wrappers.
		remove_action( 'woocommerce_before_main_content', 'woocommerce_output_content_wrapper', 10 );
		remove_action( 'woocommerce_after_main_content', 'woocommerce_output_content_wrapper_end', 10 );

		add_action( 'woocommerce_before_main_content', array( __CLASS__, 'output_content_wrapper' ), 10 );
		add_action( 'woocommerce_after_main_content', array( __CLASS__, 'output_content_wrapper_end' ), 10 );

		// This theme doesn't have a traditional sidebar.
		remove_action( 'woocommerce_sidebar', 'woocommerce_get_sidebar', 10 );

		// Enqueue theme compatibility styles.
		add_filter( 'woocommerce_enqueue_styles', array( __CLASS__, 'enqueue_styles' ) );

		// Register theme features.
		add_theme_support( 'wc-product-gallery-zoom' );
		add_theme_support( 'wc-product-gallery-lightbox' );
		add_theme_support( 'wc-product-gallery-slider' );
		add_theme_support( 'woocommerce', array(
			'thumbnail_image_width' => 300,
>>>>>>>>>>>>>>>>>>>>>>>>>'single_image_width'    => 450,
		) );

		// Tweak Twenty Nineteen features.
		add_action( 'wp', array( __CLASS__, 'tweak_theme_features' ) );

		// Color scheme CSS
		add_filter( 'twentynineteen_custom_colors_css', array( __CLASS__, 'custom_colors_css' ), 10, 3 );
	}

	/**
	 * Open the Twenty Nineteen wrapper.
	 */
	public static function output_content_wrapper() {
		echo '<section id="primary" class="content-area">';
		echo '<main id="main" class="site-main">';
	}

	/**
	 * Close the Twenty Nineteen wrapper.
	 */
	public static function output_content_wrapper_end() {
		echo '</main>';
		echo '</section>';
	}

	/**
	 * Enqueue CSS for this theme.
	 *
	 * @param  array $styles Array of registered styles.
	 * @return array
	 */
	public static function enqueue_styles( $styles ) {
		unset( $styles['woocommerce-general'] );

		$styles['woocommerce-general'] = array(
			'src'     => str_replace( array( 'http:', 'https:' ), '', WC()->plugin_url() ) . '/assets/css/twenty-nineteen.css',
			'deps'    => '',
			'version' => WC_VERSION,
			'media'   => 'all',
			'has_rtl' => true,
		);

		return apply_filters( 'woocommerce_twenty_nineteen_styles', $styles );
	}

	/**
	 * Tweak Twenty Nineteen features.
	 */
	public static function tweak_theme_features() {
		if ( is_woocommerce() ) {
			add_filter( 'twentynineteen_can_show_post_thumbnail', '__return_false' );
		}
	}

	/**
	 * Filters Twenty Nineteen custom colors CSS.
	 *
	 * @param string $css           Base theme colors CSS.
	 * @param int    $primary_color The user's selected color hue.
	 * @param string $saturation    Filtered theme color saturation level.
	 */
	public static function custom_colors_css( $css, $primary_color, $saturation ) {
		if ( function_exists( 'register_block_type' ) && is_admin() ) {
			return $css;
		}

		$lightness = absint( apply_filters( 'twentynineteen_custom_colors_lightness', 33 ) );
		$lightness = $lightness . '%';

		$css .= '
			.onsale,
			.woocommerce-info,
			.woocommerce-store-notice {
				background-color: hsl( ' . $primary_color . ', ' . $saturation . ', ' . $lightness . ' );
			}

			.woocommerce-tabs ul li.active a {
				color: hsl( ' . $primary_color . ', ' . $saturation . ', ' . $lightness . ' );
				box-shadow: 0 2px 0 hsl( ' . $primary_color . ', ' . $saturation . ', ' . $lightness . ' );
			}
		';

		return $css;
	}
}

WC_Twenty_Nineteen::init();

4) Quando scrivo 600 invece di 450 (riga “>>>>>>>>>>>>>>>>>>>>>>>>>>” nel codice sopra) e rigenera le mie miniature, Funziona! Ma so che non appena aggiornerò woocommerce la mia edizione andrà persa. Vorrei apportare questa modifica al tema del mio bambino e non direttamente nelle cartelle di woocommerce.

5) Ecco il problema: ho provato diversi modi per aggiungere il codice al tema figlio, ma nessuno ha funzionato.
-> Leggi articoli come Questo Ho aggiunto questo codice al tema di mio figlio funzioni.php:

function mytheme_add_woocommerce_support() {
    add_theme_support( 'woocommerce', array(
			'thumbnail_image_width' => 300,
			'single_image_width'    => 600,
		) );
}
add_action( 'after_setup_theme', 'mytheme_add_woocommerce_support' );

-> Ho anche provato a copiare il class-wc-novantanove.php file nel mio tema figlio e modificalo come voglio, sperando che sostituisca quello nella cartella woocommerce (non ha funzionato neanche ^^)

Qualche idea su come aggiungere questa semplice modifica al tema del mio bambino per evitare di modificare il file woocommerce più e più volte ogni volta che devo aggiornare il plug-in?

grazie
Isabelle

La pagina per cui ho bisogno di aiuto: [log in to see the link]

  • (@jarretc)

    Prova ad aggiungere remove_theme_support prima di add_theme_support nel tuo codice, qualcosa come il seguente

    function doe_thumbnail_width() {
    	remove_theme_support( 'woocommerce' );
    	add_theme_support( 'woocommerce', array(
    		'thumbnail_image_width' => 300,
    		'single_image_width' => 600,
    	) );
    }
    
    add_action( 'after_setup_theme', 'doe_thumbnail_width', 11 );

    (@isadoe)

    Ciao Jarret, grazie per la tua risposta ma sfortunatamente non funziona neanche

    (@isadoe)

    Ciao di nuovo,

    Qualcuno ha qualche altra idea su come risolvere il mio problema per favore?

    Isabelle

    (@jarretc)

    Hmm, solo per essere chiari, nella pagina che hai collegato vuoi che l’immagine delle cartoline con le foglie sul lato sinistro/destro dell’immagine sia larga 600px?

    Guardando la larghezza attuale dell’area dell’immagine, sarebbero necessari CSS aggiuntivi per adattarla a un’immagine larga 600 px perché la larghezza attuale dell’immagine principale con la mini-galleria sottostante non è larga 579 px.

    (@isadoe)

    Ciao Jarret,

    Sì, hai ragione, 579 px sarebbe la larghezza corretta. In realtà tutto ciò che voglio è che l’immagine venga visualizzata a tutta larghezza nella sua colonna: ho detto 600 come numero arrotondato. Quando uso 600px invece di 450px nel file originale “class-wc-twenty-nineteen.php” tutto funziona bene, il mio unico problema è che non so come scriverlo in modo permanente sul tema figlio.

    (@isadoe)

    Ciao di nuovo,

    Il mio problema è risolto 🙂 Qualche giorno fa ho chiesto aiuto anche sul forum di supporto di Woocommerce (dato che il problema era relativo sia al tema Twenty Nineteen che al plugin Woocommerce) e oggi abbiamo trovato cosa non andava (vedi thread qui).

    Un tutore è stato smarrito nel tema di mio figlio funzioni.php. Una volta spostato nel posto giusto, l’aggiunta del seguente codice al file mi ha permesso di personalizzare la larghezza dell’immagine principale:

    function mytheme_add_woocommerce_support() {
        add_theme_support( 'woocommerce', array(
    			'thumbnail_image_width' => 300,
    			'single_image_width'    => 600,
    		) );
    }
    add_action( 'after_setup_theme', 'mytheme_add_woocommerce_support' );

    Grazie Jarret per aver cercato di aiutarmi, non potevi trovare ciò che non andava senza avere accesso al mio file functions.php.
    Buona giornata,
    Isabelle

Hai risolto il tuo problema?

0 / 0

Lascia un commento 0

Il tuo indirizzo email non sarà pubblicato. Required fields are marked *