Добавить дополнительную информацию Woocommerce ордера редактировать страницы в админке

Привет, я использую Woocommerce версии 3.2.6. У нас есть несколько заказов.

Я хочу добавить одну дополнительную информацию к заказам, когда product id является 123 на странице редактирования заказа в WordPress Backend.

Я хочу добавить это:

<a href="http://example.com/new-view/?id=<?php echo $order_id?;>">Click here to view this</a>

То есть: у нас есть заказ [идентификатор заказа = 3723], и идентификатор заказанного элемента составляет 123.

Затем в http://example.com/wp-admin/post.php?post=3723&action=editЯ хочу добавить следующую ссылку ниже соответствующих деталей товара:

"<a href="http://example.com/new-view/?id=<?php echo $order_id?;>">Click here to view this</a>"

Как мы можем это сделать?

Какой крючок подходит для этого. На самом деле я ищу в https://docs.woocommerce.com/wc-apidocs/hook-docs.html.

И я нашел класс WC_Meta_Box_Order_Items, Но я не знаю, как это использовать.

2 ответа

Решение

Правильный код для WooCommerce версии 3+ для добавления настраиваемой ссылки сразу после позиций и только в бэкэнде:

add_action( 'woocommerce_after_order_itemmeta', 'custom_link_after_order_itemmeta', 20, 3 );
function custom_link_after_order_itemmeta( $item_id, $item, $product ) {
    // Only for "line item" order items
    if( ! $item->is_type('line_item') ) return;

    // Only for backend and  for product ID 123
    if( $product->get_id() == 123 && is_admin() )
        echo '<a href="http://example.com/new-view/?id='.$item->get_order_id().'">'.__("Click here to view this").'</a>';
}

Проверено и работает

1) Важно: ограничивайте код для элементов заказа только типом "позиция", чтобы избежать ошибок в других элементах заказа, таких как "доставка", "сбор", "скидка"...

2) Из WC_Product объект, чтобы получить идентификатор продукта, который вы будете использовать WC_Dataget_id() метод.

3) Получить идентификатор заказа от WC_Order_Item_Product объект, который вы будете использовать WC_Order_Item метод get_order_id(),

4) Вам нужно добавить is_admin() в if оператор для ограничения отображения в бэкэнде.

Элементы заказа Meta Box использует html-order-items.php перебирать элементы заказа, которые в свою очередь используют html-order-item.php для отображения каждого элемента.

Для вашей цели вы должны заглянуть внутрь html-order-item.php для точного места, где вы хотели бы вставить свой фрагмент кода.

Я предполагаю woocommerce_after_order_itemmeta Действие ловушка идеальна, поскольку она покажет ссылку чуть ниже мета-информации об элементе. (Если вы хотите отобразить ссылку до мета элемента, чем использовать woocommerce_before_order_itemmeta .)

add_action( 'woocommerce_after_order_itemmeta', 'wp177780_order_item_view_link', 10, 3 );
function wp177780_order_item_view_link( $item_id, $item, $_product  ){
    if( 123 == $_product->id ) {
        echo "<a href='http://example.com/new-view/?id=" . $order->id . "'>Click here to view this</a>";
    }
}
Другие вопросы по тегам