Adăugarea unui shortcode personalizat WooCommerce în tema copil
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.
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');
