• billynapoli084

    (@billynapoli084)


    Salve,
    ho un problema con la gestione template del mio plugin.

    Questo e il codice interessato:

    function btm_template_checkout($template, $template_name, $template_path) {
    if ($template_name == ‘checkout/form-checkout.php’) {
    $template = ‘wp-content/plugins/baltramm/templates/woocommerce/checkout/form-checkout.php’;
    }
    return $template;
    }

    function btm_template_content_product($template, $template_name, $template_path) {
    if ($template_name == ‘content-product.php’) {
    $template = ‘wp-content/plugins/baltramm/templates/woocommerce/content-product.php’;
    }
    return $template;
    }
    add_filter(‘woocommerce_locate_template’, ‘btm_template_content_product’, 20, 3);
    add_filter(‘woocommerce_locate_template’, ‘btm_template_checkout’, 20, 3);

    Perchè il file form-checkout.php viene regolarmente sostituito mentre content-product.php resta quello originale?
    I file sono presenti e i percorsi sono corretti; premetto che non sono ancora un professionista wordpress.

    Grazie
    Antonio

Stai visualizzando 1 risposte (di 1 totali)
  • Moderator Guido Scialfa

    (@wido)

    Ciao @billynapoli084,

    I due template vengono gestiti in modo differente.

    Mentre form-checkout.php è un template interno a WooCommerce che viene incluso all’interno di un’altro template, il content-product.php è un template a livello di WordPress.

    Per spiegarmi in modo più chiaro.
    Per content-product.php apri il file plugins/woocommerce/templates/archive-product.php e noterai questa riga di codice <?php wc_get_template_part( 'content', 'product' ); ?> Come puoi capire bene la funzione wc_get_template_part() non è la stessa funzione utilizza per includere invece form-checkout.php che è invece wc_get_template().

    Alcuni template all’interno di plugins/woocommerce/template sono caricati quando agganciati ad una hook, altri invece che risiedono a livello del loop di WordPress invece vengono inclusi con la classica funzione wc_get_template_part molto simile a quella di WordPress ma che va a cercare il file prima nel tema e poi nel plugin di WooCommerce.

    Quindi se vuoi sovrascrivere il file content-product.php non devi fare altro che copiarlo all’interno della directory del tema woocommerce/content-product.php.

    Diverso è il discorso se vuoi sovrascrivere il comportamento di wc_get_template_part dal plugin, in questo caso devi dare uno sguardo alla funzione che è locata in plugins/woocommerce/includes/wc-core-functions.php.

    Il filtro che ti interessa è wc_get_template_part. Come puoi vedere di seguito:

    
    // Allow 3rd party plugins to filter template file from their plugin.
    $template = apply_filters( 'wc_get_template_part', $template, $slug, $name );
    
Stai visualizzando 1 risposte (di 1 totali)

Il topic ‘Woocommerce_locate_template’ è chiuso a nuove risposte.