#php #wordpress #templates #woocommerce #shortcode
#php #wordpress #шаблоны #woocommerce #короткий код
Вопрос:
Я не могу получить идентификатор заказа в пользовательском шаблоне электронной почты woocommerce с помощью шорткода. Это работает напрямую.
Рабочий код в admin-new-order.php
шаблоне:
echo $order->get_id();
Мой приведенный ниже шорткод не работает, и я не знаю почему. Моя цель — в конечном итоге вставить текстовые переменные, такие как «Hello Firstname», с помощью шорткода в шаблон электронной почты.
function custom_first_name($order, $order_id){
global $woocommerce, $post;
global $order_id, $order;
$order = new WC_Order( $order_id );
return $order->get_id();
}
add_shortcode( 'custom-woocommerce-name' , 'custom_first_name' );
Я добавляю короткий код в admin-new-order.php шаблон с помощью этого кода:
echo do_shortcode('[custom-woocommerce-name]');
$order->get_id()
и оба коротких кода должны выводить идентификатор заказа.
Ответ №1:
Чтобы получить идентификатор заказа из шорткода, используемого в admin-new-order.php
шаблоне, вам придется вместо этого использовать следующий код функции:
function wc_custom_first_name( $atts ){
// Extract shortcode attributes
extract( shortcode_atts( array(
'id' => '',
), $atts, 'wc-custom-name' ) );
return $id; // return order id
}
add_shortcode( 'wc-custom-name' , 'wc_custom_first_name' );
Код вводится functions.php файл активной дочерней темы (или активной темы).
Затем вы будете использовать следующее в admin-new-order.php
файле шаблона:
echo do_shortcode("[wc-custom-name id='{$order->get_id()}']");
Протестировано и работает.
Примечание:
Доступные переменные аргументы, передаваемые в
admin-new-order.php
шаблон, следующие:
$order
$email_heading
$additional_content
$sent_to_admin
$plain_text
Комментарии:
1. Еще один вопрос: вы также знаете, как я могу использовать этот шорткод в текстовом поле ACF? Я хочу добавить это поле в
admin-new-order.php
usingecho get_field( 'text_woocommerce_mail', 'option' );
. Теперь это работает только в том случае, если я добавляю его черезdo_shortcode
.2.@Bob Попробуйте использовать
echo get_field( 'text_woocommerce_mail', $id );
orthe_field( 'text_woocommerce_mail', $id );
(без echo)