Проверьте пользовательские мета продукта по сокращению количества акций Woocommerce - PullRequest
0 голосов
/ 14 апреля 2020

Итак, у меня есть несколько функций, скрытых внутри функции, которые прекрасно работают. Все работает как надо. ЕДИНСТВЕННАЯ проблема, с которой я сталкиваюсь, которая мешает мне завершить выполнение этого скрипта, возникает во время сокращения запасов после оформления заказа.

У меня есть поле с пользовательским флажком, расположенное на странице общих настроек (изображение включено). Я просто пытаюсь создать ситуацию, когда функция не запускается для продуктов, для которых этот флажок НЕ установлен.

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

Я перепробовал все и до сих пор не могу заставить это работать. Вся помощь приветствуется. (PS. Я исключил остальную часть кода, который срабатывает нормально, чтобы избежать перенасыщения кода - я могу включить это, если это поможет.)

General Settings Checkbox

// ---------------------------------------------------------------------------------------- //
// ---------------------------------------------------------------------------------------- //
// ---------------------------------------------------------------------------------------- //
// ---------------------------------------------------------------------------------------- //
// ----------------------------  INVENTORY CONTROL BY WEIGHT  ----------------------------- //
// ---------------------------------------------------------------------------------------- //
// ---------------------------------------------------------------------------------------- //
// ---------------------------------------------------------------------------------------- //
// ---------------------------------------------------------------------------------------- //


add_action('woocommerce_before_main_content', 'quantity_control', 10, 1);
    function quantity_control( $post_id ) {
        $stock_weight_checkbox = get_post_meta( get_the_id(),'_stock_weight_checkbox', true );

        var_dump($stock_weight_checkbox);

        if ( 'yes' == $stock_weight_checkbox ) {

                // ---------------------------------------------------------------------------------------- //
                // --------------------------  REDUCE WEIGHT BASED ON CUSTOM FIELD  ----------------------- //
                // ---------------------------------------------------------------------------------------- //

                add_filter( 'woocommerce_order_item_quantity', 'filter_order_item_quantity', 10, 4 ); 
                function filter_order_item_quantity( $quantity, $order, $item )  
                {
                    $product   = $item->get_product();
                    $term_name = $product->get_meta( 'custom_field', true );
                    $stock_weight_checkbox = $product->get_meta( '_stock_weight_checkbox', true );


                    // 'pa_weight' attribute value is "15 grams" - keep only the numbers
                    $quantity_grams = preg_replace('/[^0-9.]+/', '', $term_name);

                    // new quantity
                    if( 'yes' == $stock_weight_checkbox && is_numeric ( $quantity_grams ) && $quantity_grams != 0 )
                        $quantity *= $quantity_grams;

                    return $quantity;

                }

1 Ответ

0 голосов
/ 14 апреля 2020

Я не уверен в этом ответе, но add_filter( 'woocommerce_order_item_quantity', 'filter_order_item_quantity', 10, 4 ); не смог бы вызвать filter_order_item_quantity, потому что он определен в области действия quantity_control?

Если вы определите функцию внутри функция, это, вероятно, будет означать, что вы не используете ее где-либо еще, верно?

Если это так, вы можете просто использовать замыкания:

...
if ( 'yes' == $stock_weight_checkbox ) {

    add_filter( 'woocommerce_order_item_quantity', function ( $quantity, $order, $item )
    {
        ...
        return $quantity;

    }, 10, 4 );

}
...

В противном случае, определение функции на том же уровне как quantity_control должно работать так же.

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