Woocommerce-在woocommerce_before_save_order_items中获取变量

问题描述 投票:1回答:1

我正在尝试在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

Here is screenshot of admin

非常感谢帮助人员...

php post woocommerce
1个回答
0
投票

要使用自定义税类更改订单行项目的税类,您需要使用操作挂钩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。还有其他遗漏的东西。

但是,由于此挂钩是在设置过帐的属性之前触发的,因此它不会更改原始订单行项目税种。

© www.soinside.com 2019 - 2024. All rights reserved.