Adăugarea unui shortcode personalizat WooCommerce în tema copil

26 iul. 2013, 21:04:44
Vizualizări: 21.3K
Voturi: 0

Am cumpărat o temă de pe themeforest.com care conține șabloane personalizate pentru plugin-ul WooCommerce. Am creat o temă copil pentru a nu modifica tema originală.

Până acum am reușit să suprascriu template-ul form-login.php în tema mea copil.

Ceea ce încerc să fac acum este să adaug un shortcode personalizat, similar cu [woocommerce_my_account] care va apela template-ul form-login.php pe care l-am suprascris.

Codul care creează shortcode-urile în plugin-ul WooCommerce arată astfel:

Fișier: /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 );
    }
}

Fișier: /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
            ) );

        }
    }
}

Cum aș putea adăuga un shortcode personalizat ca acesta?

Îl pun în tema mea copil?

Pot doar să copiez/lipesc codul din funcția output, să-l pun în functions.php și să folosesc add_shortcode('custom_shortcode', 'function_in_my_functions_php'); ? Dar ce fac cu variabila globală $woocommerce? Pot accesa această variabilă din tema mea copil?

Vă mulțumesc mult dacă cineva dorește să mă lămurească, abia încep să învăț WordPress.

0
Toate răspunsurile la întrebare 1
1

Variabila globală $woocommerce poate fi accesată, trebuie doar să scrii global $woocommerce; înainte de a o folosi. Citește acest articol.

Poți defini propriul tău shortcode, vezi documentația. Poți copia/insera codul pentru că este încapsulat într-o clasă, astfel nu va provoca eroare fatală din cauza declarației duble.

Dar shortcode-urile nu funcționează în felul următor:

function shortcode_handler($atts) {
  //codul va fi aici
 }
add_shortcode('name_of_shortcode','shortcode_handler');
26 iul. 2013 21:49:15
Comentarii

Mulțumesc pentru ajutor, funcționează perfect, nu știam că e atât de simplu.

Smos Smos
28 iul. 2013 18:26:00