我正在尝试在Woo中通过选择框更改管理数据顺序的税种。我做了列,选择带有税种的框,但我无法保存它。
我在functions.php中的代码就是这样
function tax_edit_col_h($order){
?>
<th class="line_changetax">
Change TAX
</th>
<?php
}
add_action( 'woocommerce_admin_order_item_headers', 'tax_edit_col_h' );
function tax_change($item) {
?>
<td class="line_changetax">
<select name="change_tax" id="change_tax_select" style="width:100%;">
<?php
$arraytax = WC_Tax::get_tax_class_slugs();
echo '<option value="'.$item->get_tax_class().'">'.$item->get_tax_class().'</option>';
foreach($arraytax as $tax){
echo '<option value="'.$tax.'">'.$tax.'</option>';
}
?>
</select>
</td>
<?php
}
add_action( 'woocommerce_admin_order_item_values', 'tax_change' );
function change_tax_save(){
echo var_dump($_POST['change_tax']);
WC_Order_Item_Product::set_tax_class($_POST['change_tax']);
}
add_action( 'woocommerce_before_save_order_items', 'change_tax_save', 10, 2 );
“ Change_tax”的转储为NULL
非常感谢帮助人员...
要使用自定义税类更改订单行项目的税类,您需要使用操作挂钩woocommerce_before_save_order_item
,例如:
add_action( 'woocommerce_before_save_order_item', 'change_order_item_tax_class' );
function change_order_item_tax_class( $item ) {
if ( 'line_item' === $item->get_type() && isset($_POST['change_tax']) ) {
$item->set_tax_class($_POST['change_tax']);
}
}
此代码在您的活动子主题(或活动主题)的functions.php上。它应该更好地工作。
对于在代码中使用的钩子woocommerce_before_save_order_items
,在钩子函数中缺少2个参数:$order_id
和$items
。还有其他遗漏的东西。
但是,由于此挂钩是在设置过帐的属性之前触发的,因此它不会更改原始订单行项目税种。