Добавление собственного шорткода WooCommerce в дочернюю тему, как это сделать?

26 июл. 2013 г., 21:04:44
Просмотры: 21.3K
Голосов: 0

Я купил тему на themeforest.com, которая имеет некоторые пользовательские шаблоны для работы с плагином WooCommerce. Я создал дочернюю тему, чтобы не редактировать оригинальную тему.

На данный момент мне удалось переопределить шаблон form-login.php в моей дочерней теме.

Теперь я пытаюсь добавить пользовательский шорткод, похожий на [woocommerce_my_account], который будет вызывать переопределенный мной шаблон form-login.php.

Код, который создает шорткоды в плагине WooCommerce, выглядит следующим образом:

Файл: /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 );
    }
}

Файл: /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
            ) );

        }
    }
}

Как я могу добавить такой пользовательский шорткод?

Нужно ли размещать его в моей дочерней теме?

Могу ли я просто скопировать/вставить код из функции output, поместить его в мой functions.php и выполнить add_shortcode('custom_shortcode', 'function_in_my_functions_php'); ? А как насчет глобальной переменной $woocommerce? Могу ли я получить доступ к этой переменной из моей дочерней темы?

Большое спасибо всем, кто сможет пролить свет на этот вопрос, я только начинаю изучать WordPress.

0
Все ответы на вопрос 1
1

Глобальная переменная $woocommerce доступна, вам просто нужно написать global $woocommerce; перед её использованием. Прочитайте эту статью.

Вы можете определить свой собственный шорткод, см. документацию. Вы можете скопировать/вставить код, так как он обёрнут в класс, что предотвратит фатальную ошибку из-за двойного объявления.

Но шорткоды так не работают:

function shortcode_handler($atts) {
  //код здесь
 }
add_shortcode('name_of_shortcode','shortcode_handler');
26 июл. 2013 г. 21:49:15
Комментарии

Спасибо за помощь, работает идеально, не знал что это так просто.

Smos Smos
28 июл. 2013 г. 18:26:00