1. 問題:
重さを量った生鮮食品を販売したい (したがって、顧客が実際に注文した重量と正確に一致することはありません)。特定の製品が入手できなくなった場合、同様の製品が出荷されることがあります。
例えば:
注文: 1.000 kg リンゴ (品種 A) 出荷: 0.975 kg りんご (品種 B)
顧客が請求書でこれを確認できるようにしたい:
製品 | キロ注文 | 出荷されたキロ ____|____________|____________ りんご (品種 A) | 1.000キロ | 0.000kg りんご (品種 B) | 0.000 キロ | 0.975キロ
- これは、WooCommerce が Qty 列/変数 (古いものとカスタムのもの) の両方の数量を
float
ではなくとして処理することを「確信」する必要があることを意味しますinteger
。 - したがって、バックオフィスで注文を更新するときに、数量がゼロの製品の削除を停止するために WooCommerce も必要です (
product_qty
)。
部分的な一時的な解決策:
\woocommerce\includes\admin\wc-admin-functions.php
Line284:
$item->delete();
// $item->delete();
- また、テーブルの新しいカスタム列 (既に作成したもの) (「グッド プラクティス」でない場合 - この列をどこに & どのように追加すればよいですか?) を使用して、顧客が作成した瞬間に(同じテーブル内の) 列から値を取得します。注文。
product_quantity_ordered
{prefix}wc_order_product_lookup
product_qty
{prefix}wc_order_product_lookup
部分的な一時的な解決策: phpMyAdmin
の SQL クエリ:
UPDATE
L16_wc_order_product_lookup
SET product_qty_ordered
= product_qty
WHERE date_created
BETWEEN '2020-06-24' AND '2020/07/14';
- アドミンの注文編集ページと請求書の両方で、両方の数量列を並べて表示することもできます (最初に注文した数量、次に出荷した数量) 。
2.私が試したこと:
- テーブルに新しいカスタム列 を追加しました(繰り返しますが、これが「ベスト プラクティス」ではない場合... この新しい列をどこに追加すればよいでしょうか?)
画像を参照してください:
product_quantity_ordered
{prefix}wc_order_product_lookup
- Order Details の Show product meta in order items テーブルのコード スニペットを使用しました(これにより、新しい列 column が表示され、そこに からの値が取り込まれます
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>';
}