1.问题:
我想出售经过称重的易腐烂物品(因此重量永远不会与客户实际订购的重量完全匹配),有时如果某个特定产品不再可用,则会运送类似的产品。
例如:
订购:1.000 公斤苹果(A 品种) 装运:0.975 公斤苹果(B 品种)
我希望客户能够在他们的发票中看到这一点:
产品 | 公斤订购 | 公斤装运 _____|____________|___________ 苹果(A 品种)| 高分辨率照片| CLIPARTO 1.000 公斤 | 0.000 公斤 苹果(B 类)| 高分辨率照片| CLIPARTO 0.000 公斤 | 0.975 公斤
- 这意味着 WooCommerce 应该被“说服”处理两个数量列/变量(旧的和自定义的)中的数量,
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
部分临时解决方案: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 table 中的代码片段(它显示了新的列并用来自 的值填充它
product_qty
)。但是,一旦我在编辑订单页面中编辑产品数量 - 当然 - WooCommerce 会更新两个数量列。
看图片:
3.我的代码:
暂时只有这个片段(来自Show product meta in order items table in Order Details):
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>';
}