Añadiendo mi propio shortcode personalizado de WooCommerce al tema hijo, ¿cómo?

26 jul 2013, 21:04:44
Vistas: 21.3K
Votos: 0

Compré un tema en themeforest.com que tiene algunas plantillas personalizadas para usar con el plugin WooCommerce. Creé un tema hijo para no tener que editar nada en el tema original.

Hasta ahora, he podido sobrescribir la plantilla form-login.php en mi tema hijo.

Lo que estoy tratando de hacer ahora es añadir un shortcode personalizado, similar al [woocommerce_my_account] que llamará a la plantilla form-login.php que he sobrescrito.

El código que crea los shortcodes en el plugin WooCommerce se ve así:

Archivo: /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 );
    }
}

Archivo: /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
            ) );

        }
    }
}

¿Cómo podría añadir un shortcode personalizado como ese?

¿Lo pongo en mi tema hijo?

¿Puedo simplemente copiar/pegar el código de la función output, ponerlo en mi functions.php y hacer add_shortcode('custom_shortcode', 'function_in_my_functions_php'); ? Pero ¿qué pasa con la variable global $woocommerce? ¿Puedo acceder a esa variable desde mi tema hijo?

Muchas gracias si alguien puede arrojar algo de luz sobre esto, estoy empezando a aprender WordPress.

0
Todas las respuestas a la pregunta 1
1

Se puede acceder al global $woocommerce, solo tienes que escribir global $woocommerce; antes de usarlo. Lee este artículo.

Puedes definir tu propio shortcode, consulta la documentación. Puedes copiar/pegar el código porque está envuelto en una clase, así que no causará un error fatal por declaración doble.

Pero los shortcodes no funcionan de esta manera:

function shortcode_handler($atts) {
  //el código va aquí
 }
add_shortcode('name_of_shortcode','shortcode_handler');
26 jul 2013 21:49:15
Comentarios

Gracias por tu ayuda, funciona perfectamente, no sabía que era tan simple.

Smos Smos
28 jul 2013 18:26:00