Aggiungere uno shortcode personalizzato WooCommerce al tema child, come fare?

26 lug 2013, 21:04:44
Visualizzazioni: 21.3K
Voti: 0

Ho acquistato un tema su themeforest.com che ha alcuni template personalizzati da utilizzare con il plugin WooCommerce. Ho creato un tema child per non dover modificare nulla nel tema originale.

Finora sono riuscito a sovrascrivere il template form-login.php nel mio tema child.

Quello che sto cercando di fare ora è aggiungere uno shortcode personalizzato, simile a [woocommerce_my_account] che richiami il template form-login.php che ho sovrascritto.

Il codice che crea gli shortcode nel plugin WooCommerce appare così:

File: /wp-content/plugins/woocommerce/classes/class-wc-shortcodes.php

class WC_Shortcodes {

    public function __construct() {
        add_shortcode( 'woocommerce_my_account', array( $this, 'my_account' ) );
    }

    public function my_account( $atts ) {
        global $woocommerce;
        return $woocommerce->shortcode_wrapper( array( 'WC_Shortcode_My_Account', 'output' ), $atts );
    }
}

File: /wp-content/plugins/woocommerce/classes/shortcodes/class-wc-shortcode-my-account.php

class WC_Shortcode_My_Account {

    public static function get( $atts ) {
        global $woocommerce;
        return $woocommerce->shortcode_wrapper( array( __CLASS__, 'output' ), $atts );
    }

    public static function output( $atts ) {
        global $woocommerce;

        if ( ! is_user_logged_in() ) {

            woocommerce_get_template( 'myaccount/form-login.php' );

        } else {

            extract( shortcode_atts( array(
                    'order_count' => 5
            ), $atts ) );

            woocommerce_get_template( 'myaccount/my-account.php', array(
                'current_user'  => get_user_by( 'id', get_current_user_id() ),
                'order_count'   => 'all' == $order_count ? -1 : $order_count
            ) );

        }
    }
}

Come potrei aggiungere uno shortcode personalizzato come quello?

Devo metterlo nel mio tema child?

Posso semplicemente copiare/incollare il codice dalla funzione output, metterlo nel mio functions.php e fare add_shortcode('custom_shortcode', 'function_in_my_functions_php'); ? E per quanto riguarda la variabile globale $woocommerce? Posso accedere a quella variabile dal mio tema child?

Grazie mille se qualcuno vuole fare luce su questo, sto solo iniziando a imparare WordPress.

0
Tutte le risposte alla domanda 1
1

La variabile globale $woocommerce può essere raggiunta, devi semplicemente scrivere global $woocommerce; prima di utilizzarla. Leggi questo articolo.

Puoi definire il tuo shortcode personalizzato, consulta la documentazione. Puoi copiare/incollare il codice perché è racchiuso in una classe quindi non causerà errori fatali dovuti a doppia dichiarazione.

Ma gli shortcode non funzionano in questo modo:

function shortcode_handler($atts) {
  //il codice va qui
 }
add_shortcode('name_of_shortcode','shortcode_handler');
26 lug 2013 21:49:15
Commenti

Grazie per il tuo aiuto, funziona perfettamente, non sapevo fosse così semplice.

Smos Smos
28 lug 2013 18:26:00