Как игнорировать пользовательское поле в процессе возврата заказа в woocommerce - PullRequest
1 голос
/ 07 января 2020

Я использую этот код ниже в файле «мои функции». php.

 //Add price inc VAT column on admin order page
function action_woocommerce_admin_order_item_values( $null, $item, $absint ) {
    $val = ($item['type'] == 'line_item' || $item['type'] == 'shipping') ? $item['total'] + $item['total_tax'] : ' ';
    $valdecimal = wc_format_decimal( $val, $dp='', $trim_zeros );
    ?>
    <td class="item_fcost" data-sort-value="<?php echo $val; ?>">
        <div class="view" style="font-weight: bold; text-align: right; padding-right: 10px;">
            <?php if ($val>0) echo '$'; echo $valdecimal;?>
        </div>
    </td>
    <?php
};
add_action( 'woocommerce_admin_order_item_values', 'action_woocommerce_admin_order_item_values', 10, 3 );


function action_woocommerce_admin_order_item_headers( $order ) {
    echo '<th class="item_fcost sortable" data-sort="float" style="text-align: right;">Price inc VAT</th>';
};
add_action( 'woocommerce_admin_order_item_headers', 'action_woocommerce_admin_order_item_headers', 10, 3 );

Это дает мне возможность показывать отдельный показ НДС $.

Вы можете узнать больше о эта тема здесь

Проблема заключается в том, что при возврате продукта возникает новая ошибка woocommerce (начиная с 5.2)

Сайт испытывает технические трудности. Пожалуйста, проверьте почтовый ящик администратора вашего сайта для получения инструкций.

Я просто смотрю на ошибку, и кажется, что wocommerce отображает ее, потому что не может найти это настраиваемое поле в процессе возврата ...

 #3 /nas/content/staging/.../wp-content/plugins/woocommerce/includes/admin/meta-boxes/views/html-order-refund.php(48): do_action('woocommerce_adm...', NULL, Object(WC_Order_Refund), 68711) 

Как я могу удалить эти пользовательские функции из процесса возврата? Есть ли способ просто скрыть эту ошибку?

1 Ответ

0 голосов
/ 13 января 2020

Я тоже затронул эту проблему. Проблема в том, что woocommerce_admin_order_item_values ​​ теперь вызывается как с WC_Order_Refund , так и с WC_Order_item . Теперь мы должны определить, какой тип объекта мы получаем, когда мы его получаем, и обрабатывать его соответствующим образом. Вы можете различить этот код.

if ($item->get_type() == 'shop_order_refund') {
    $item = new WC_Order_Refund($item_id);
}
else {
    $item = new WC_Order_Item_Product($item_id);
}

В вашем случае я считаю, что вам нужно изменить первый оператор условия в начале кода на что-то похожее на

switch ($item->get_type()) {
    case 'shop_order_refund':
        $val = $item->get_amount();
        break;
    case 'line_item':
    case 'shipping':
        $val = $item['total'] + $item['total_tax'];
        break;
    default:
        $val = '&nbsp;';
        break;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...