WooCommerce: страница сведений о заказе: вставьте значения из нового пользовательского столбца «quantity_ordered» в таблицу «wc_order_product_lookup»

1. Проблема:

Я хочу продавать скоропортящиеся товары, которые взвешиваются (и, следовательно, никогда не совпадают по весу с фактически заказанным покупателем), и иногда, если определенного продукта больше нет в наличии, будет отправлен аналогичный продукт.
например:

ordered: 1.000 kg apple (variety A)  
shipped: 0.975 kg apple (variety B)

Я хочу, чтобы клиенты могли видеть это в своем счете:

Product           | kg ordered | kg shipped  
__________________|____________|___________
apple (variety A) | 1.000 kg   | 0.000 kg
apple (variety B) | 0.000 kg   | 0.975 kg
  • Это означает, что WooCommerce следует убедить обрабатывать количества в обоих столбцах/переменных Qty (старом и пользовательском) как float вместо integer.
  • Поэтому мне также нужно, чтобы WooCommerce перестала удалять товары с нулевым количеством (product_qty) (при обновлении заказа в бэк-офисе).

Частичное временное решение:

\woocommerce\includes\admin\wc-admin-functions.php  

Строка 284:

$item->delete();
// $item->delete();
  • Я также хочу, чтобы новый пользовательский столбец product_quantity_ordered в таблице {prefix}wc_order_product_lookup (которую я уже создал) (если это не "хорошая практика" - где и как мне добавить этот столбец?), чтобы получить значения из столбца product_qty (в тот же стол {prefix}wc_order_product_lookup) в момент, когда клиент делает свой заказ.

Частичное временное решение:
запрос SQL в phpMyAdmin:
UPDATE L16_wc_order_product_lookup SET product_qty_ordered = product_qty ГДЕ date_created МЕЖДУ '2020-06-24' И '2020/07/14';< /код>

  • Плюсом было бы отображение обоих столбцов количества рядом друг с другом (сначала заказанное количество, а затем количество отгруженных) как на странице редактирования заказа администратором, так и в счете-фактуре.

2. Что я пробовал:

  1. Я добавил новый пользовательский столбец product_quantity_ordered в таблицу {prefix}wc_order_product_lookup (опять же, если это не лучшая практика... куда мне добавить этот новый столбец?)
    см. изображение: phpMyAdmin -  product_qty_ordered
  2. Я использовал фрагмент кода из Показать продукт meta в таблице элементов заказа в сведениях о заказе (которая отображает новый столбец столбца и заполняет его значениями из product_qty). Однако, как только я редактирую количество товара на странице редактирования заказа, конечно же, WooCommerce обновляет оба столбца количества.
    см. изображение: введите здесь описание изображения

3. Мой код:

Только этот фрагмент (из Показать метаданные продукта в таблице элементов заказа в разделе «Сведения о заказе» ) на данный момент:

add_action('woocommerce_admin_order_item_headers', 'my_woocommerce_admin_order_item_headers');
function my_woocommerce_admin_order_item_headers() {
    // set the column name
    $column_name = 'Qty ordered';
    echo '<th>' . $column_name . '</th>';
}
add_action('woocommerce_admin_order_item_values', 'my_woocommerce_admin_order_item_values', 10, 3);
function my_woocommerce_admin_order_item_values($_product, $item, $item_id = null) {
    $value = $item->get_quantity( 'edit' ); // this line of code stems from Line28 of \woocommerce\packages\woocommerce-admin\src\Overrides\OrderTraits.php 
echo '<td>' . $value . '</td>';
}

person Yoda - user264474    schedule 17.07.2020    source источник
comment
Я только что нашел способ запретить WooCommerce удалять элементы заказа с нулевым количеством: \woocommerce\includes\admin\wc-admin-functions.php Line284: ‹code›$item-›delete(); → заменить на: // $item-›delete();‹/code›   -  person Yoda - user264474    schedule 19.07.2020
comment
Я только что понял правильный синтаксис SQL-запроса: UPDATE L16_wc_order_product_lookup SET product_qty_ordered = product_qty WHERE date_created МЕЖДУ «2020-06-24» И «2020/07/14»;   -  person Yoda - user264474    schedule 19.07.2020