Доступ к объекту заказа из хука woocommerce_order_details_after_order_table - PullRequest
0 голосов
/ 19 сентября 2019

В WooCommerce я создаю собственный плагин для продавца и добавил этот хук:

add_action( 'woocommerce_order_details_after_order_table', 'track_me' );

Внутри функции track_me() я хочу получить заказ , чтобы сделатьнекоторые вещи

Функция делает то, что я хочу, когда я хочу, но в настоящее время я получаю order_id с URL, который кажется неуклюжим.

Я не могу понять, как правильно извлечь $order объект или $order_id, которого было бы достаточно.

Это почти наверняка что-то очевидное, поскольку часы поиска в Интернете были бесплодными.Я просто не знаю, что за очевидное что-то ...

ОБНОВЛЕНИЕ 1: Следуя совету @LoicTheAztec, я сделал следующее:

do_action( 'woocommerce_order_details_after_order_table_items', $order );

class Order_MY extends WC_Order
{
    function __construct() 
    {
        add_action( 'woocommerce_order_details_after_order_table', array( $this, 'track_me' ) );
    }

    function track_me( $order ) 
    { 
        // My code here
    }
}

Первое место, где сценарий терпит неудачунаходится в строке do_action, в которой PHP жалуется, что $ order - неопределенная переменная.

Сценарий также завершается ошибкой при расширении WC_Order: класс 'WC_Order' не найден

Новый вопрос ... есть что-то, что янужно сделать, чтобы у меня был доступ к классам woocommerce в моем плагине?

Ответы [ 2 ]

0 голосов
/ 19 сентября 2019

Переменная WC_Order Object $order включена в ловушку.
Вы видите, что в order/order-details.php файле шаблона (строка 76) :

do_action( 'woocommerce_order_details_after_order_table_items', $order );

Таким образом, вы можете использовать его в своей подключенной функции следующим образом:

add_action( 'woocommerce_order_details_after_order_table', 'track_me' );

function track_me( $order ) {

     // The Order ID
     $order_id = $order->get_id();

     // your code goes below
}

Теперь в плагине внутри класса вы замените:

add_action( 'woocommerce_order_details_after_order_table', 'track_me' );

на:

add_action( 'woocommerce_order_details_after_order_table', array( $this, 'track_me' ) );

Добавление:

Поскольку вы не можете получить объект $ order от своего плагина, вам также следует попробовать:

add_action( 'woocommerce_order_details_after_order_table', 'track_me' );

function track_me( $order ) {

     if ( ! is_a( $order, 'WC_Order' ) ) {
         global $order;
     }

     // The Order ID
     $order_id = $order->get_id();

     // your code goes below
}

Я не могу сказать вам больше ничего

0 голосов
/ 19 сентября 2019

Я не эксперт, но может быть, что-то.как это может работать:

global $order_id;
$order = wc_get_order($order_id);

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...