Детали заказа Woocommerce Admin — Показать пользовательские данные на странице деталей заказа

Я ищу и пробую 2 дня безуспешно, помогите пожалуйста.

Я хочу отфильтровать заказы woocommerce, чтобы добавить дополнительную информацию из базы данных на страницу сведений о заказе, основанную на атрибуте продукта, но не могу найти подходящее действие / фильтр woocommerce для этой задачи.
Здесь предположим, что я переменная $is_customized = false;

Если $is_customized == true Затем мне нужно добавить пользовательские данные из базы данных на страницу детализации заказов.

ПРИМЕЧАНИЕ: я не хочу добавлять дополнительный мета-блок, вместо этого я хочу изменить таблицу деталей заказа для:

  • Замена изображения товара по умолчанию изображением, хранящимся в базе данных
    а также,
  • Добавление div, содержащего пользовательские атрибуты, под названием продукта.

У меня есть все эти значения в моих переменных, но я не могу понять, какой хук действия я должен использовать.

Я приложил изображение для уточнения.

введите описание изображения здесь

Просто нужно знать, могу ли я изменить / отфильтровать результаты этих заказов и как?

Я ценю ваше время и помощь.
Спасибо

10

Решение

Вот начало того, как отобразить некоторые дополнительные данные на woocommerce_before_order_itemmeta крюк:

add_action( 'woocommerce_before_order_itemmeta', 'so_32457241_before_order_itemmeta', 10, 3 );
function so_32457241_before_order_itemmeta( $item_id, $item, $_product ){
echo '<p>bacon</p>';
}

Я не знаю, как вы сохраняете свои данные, поэтому я не могу сделать более точное предложение. Имейте в виду, что сразу после этой ловушки все, что вы сохранили как мета элемента заказа, будет автоматически отображаться

Фильтрация изображения сложнее. Я нашел это суть для начала, но это требует некоторой пользовательской условной логики, поскольку вы не хотите фильтровать миниатюру везде, но только по порядку.

Редактировать: В настоящее время лучшее, что я могу сделать для фильтрации миниатюр элементов:

add_filter( 'get_post_metadata', 'so_32457241_order_thumbnail', 10, 4 );
function so_32457241_order_thumbnail( $value, $post_id, $meta_key, $single ) {
// We want to pass the actual _thumbnail_id into the filter, so requires recursion
static $is_recursing = false;
// Only filter if we're not recursing and if it is a post thumbnail ID
if ( ! $is_recursing && $meta_key === '_thumbnail_id' ) {
$is_recursing = true; // prevent this conditional when get_post_thumbnail_id() is called
$value = get_post_thumbnail_id( $post_id );
$is_recursing = false;
$value = apply_filters( 'post_thumbnail_id', $value, $post_id ); // yay!
if ( ! $single ) {
$value = array( $value );
}
}
return $value;
}


add_filter( 'post_thumbnail_id', 'so_custom_order_item_thumbnail', 10, 2 );
function so_custom_order_item_thumbnail( $id, $post_id ){
if( is_admin() ){
$screen = get_current_screen();
if( $screen->base == 'post' && $screen->post_type == 'shop_order' ){
// this gets you the shop_order $post object
global $post;

// no really *good* way to check post item, but could possibly save
// some kind of array in the order meta
$id = 68;
}
}
return $id;
}
12

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru