Сохранить сумму настраиваемых полей элемента заказа WooCommerce как новые метаданные - PullRequest
1 голос
/ 27 апреля 2019

Когда конкретный продукт заказывается в этом магазине WooCommerce, к заказу добавляются два мета-значения.

Два поля, в которых хранятся мета-значения, расположены в wp_woocommerce_order_itemmeta

Мета-ключи:

quantity
assemblycost

Я хочу создать новое настраиваемое поле программным способом при размещении нового заказа и установить значение этого нового поля равным quanity * assemblycost, если для продукта, который был заказан, существует стоимость сборки мета-ключа.

После некоторых исследований я обнаружил, что woocommerce_checkout_update_order_meta - это ловушка, которая выполняется после сохранения заказа в базе данных и обновления метаданных. Так что это, кажется, тот крючок, который я должен использовать.

Ref: Добавить дополнительные мета для заказов в Woocommerce :

 function add_item_meta( $order_id ) {
            //global $woocommerce;
            update_post_meta( $order_id, '_has_event', 'yes' );
        } 

Я попытался добавить следующий код в functions.php:

 add_action('woocommerce_checkout_update_order_meta',function( $order_id, $posted ) {  
    $assemblycost = wc_get_order_item_meta($order_id, 'assemblycost');
    $quantity = wc_get_order_item_meta($order_id, 'quantity');
    $calculatedValue = $quantity * $assemblycost;
    wc_update_order_item_meta( $order_id, 'calculated_field', $calculatedValue );  
} , 10, 2);

Это создает новое метаполе, однако оно устанавливает значение 0.

enter image description here

Как я могу изменить приведенный выше код, чтобы значение поля selected__ умножалось на quantity * assemblycost?

1 Ответ

1 голос
/ 27 апреля 2019

Это относится к позициям заказа и должно быть сохранено как метаданные позиции заказа, но не как метаданные заказа.

Теперь это должно быть сохранено одновременно , чем ваши 2 настраиваемых поля quantity и assemblycost. Таким образом, вы должны предоставить в своем вопросе соответствующий код, который сохраняет quantity и assemblycost в качестве метаданных элемента заказа.

Вы можете попробовать следующее (но я не уверен, что буду работать):

add_action( 'woocommerce_checkout_create_order_line_item', 'action_checkout_create_order_line_item_callback', 1000, 4 );
function action_checkout_create_order_line_item_callback( $item, $cart_item_key, $cart_item, $order ) {
    $quantity     = $item->get_meta('quantity');
    $assemblycost = $item->get_meta('assemblycost');
    if( isset($quantity) && isset($assemblycost) ) {
        $item->update_meta_data( 'calculated_field', $quantity * $assemblycost );
    }
}

Код помещается в файл function.php вашей активной дочерней темы (или активной темы).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...