Передать идентификатор заказа в коротком коде, используемом в шаблонах электронной почты WooCommerce

#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
  • $email

Комментарии:

1. Еще один вопрос: вы также знаете, как я могу использовать этот шорткод в текстовом поле ACF? Я хочу добавить это поле в admin-new-order.php using echo get_field( 'text_woocommerce_mail', 'option' ); . Теперь это работает только в том случае, если я добавляю его через do_shortcode .

2.@Bob Попробуйте использовать echo get_field( 'text_woocommerce_mail', $id ); or the_field( 'text_woocommerce_mail', $id ); (без echo)