Установите максимальное количество на основе настраиваемого поля в вариации продукта - PullRequest
1 голос
/ 12 апреля 2020

Я пытаюсь установить допуск максимального количества варианта на основе значения одного из его настраиваемых полей.

Все хорошо - код работает ниже, однако вместо $quantity = round(9/3); Я хочу значение $quantity = round($quantity/$weight);

Проблема, с которой я сталкиваюсь (и у меня было много раз в прошлом с другими функциями), заключается в том, что я не могу, судя по всему, получить правильные данные 'Custom_Field' , Все, что я пробую, возвращает либо boolean false, либо string Length(0). Когда я делаю var_dump($variation_ID), я получаю тонну данных, но моего настраиваемого поля там нет.

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

// On single product pages
    add_filter( 'woocommerce_available_variation', 'customizing_available_variation', 10, 3  );
    function customizing_available_variation( $args, $product_id, $variation_id ) {


    $product = wc_get_product ( $product_id );
    $weight = get_post_meta( $variation_ID, 'custom_field', true );

    $product_stock = $product_id->get_stock_quantity();
    var_dump($variation_id);

    $quantity = round(9/3);

    if( is_woocommerce() ){
        $args['max_qty'] = $quantity;
    }

    return $args;
}

1 Ответ

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

woocommerce_available_variation передает три аргумента, третий - WC_Product_Variation (именно поэтому вы получаете тонну данных, когда var_dump -ing это).

Вы назвали свой третий аргумент $variation_id, что, вероятно, привело к тому, что вы рассматриваете его как идентификатор поста / продукта.

То есть вы пытаетесь передать WC_Product_Variation как идентификатор get_post_meta():

$weight = get_post_meta( $variation_ID, 'custom_field', true );

Вы также делаете то же самое для второго аргумента (это продукт, а не идентификатор продукта).

Вы просто должны получить идентификатор варианта и передать его вместо:

/**
 * Customize available variation
 *
 * @param array $args
 * @param WC_Product_Variable $product
 * @param WC_Product_Variation $variation
 */
function customizing_available_variation( $args, $product, $variation ) {
    $weight = get_post_meta( $variation->get_id(), 'custom_field', true );
    // …
}
...