Добавление собственного шорткода WooCommerce в дочернюю тему, как это сделать?
Я купил тему на 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.
Глобальная переменная $woocommerce
доступна, вам просто нужно написать global $woocommerce;
перед её использованием. Прочитайте эту статью.
Вы можете определить свой собственный шорткод, см. документацию. Вы можете скопировать/вставить код, так как он обёрнут в класс, что предотвратит фатальную ошибку из-за двойного объявления.
Но шорткоды так не работают:
function shortcode_handler($atts) {
//код здесь
}
add_shortcode('name_of_shortcode','shortcode_handler');
