मैं एक कस्टम फ़ील्ड का मूल्य प्राप्त करने का प्रयास कर रहा हूं ताकि मैं इसकी तुलना स्टॉक में राशि से कर सकूं और लौटाए गए मूल्य के आधार पर एक संदेश प्रदर्शित कर सकूं।

मुझसे boolean false - string length 0 या Uncaught Error: Call to a member function get_meta() on boolean मिलते रहते हैं

// check out of stock using 'custom_field' value
    add_filter( 'woocommerce_add_to_cart_validation', 'woocommerce_validate_attribute_weight', 10,3);
    function woocommerce_validate_attribute_weight($variation_id, $variations, $product_id) {

    $grams = get_post_meta( $variation_id, 'custom_field', true );

    // get product id
    if (isset($_REQUEST["add-to-cart"])) {
        $productid = (int)$_REQUEST["add-to-cart"];
    } else {
        $productid = null;
    }

    // get quantity
    if (isset($_REQUEST["quantity"])) {
        $quantity = (int)$_REQUEST["quantity"];
    } else {
        $quantity = 1;
    }

// get weight of selected variation
    if (isset($_REQUEST["custom_field"])) {
        $weight = preg_replace('/[^0-9.]+/', '', $_REQUEST["custom_field"]);
    } else {
        $weight = null;
    }

    // comparing stock
    if($productid && $weight)
    {
        $product = wc_get_product($productid);
        $productstock = (int)$product->get_stock_quantity();

        if(($weight * $quantity) > $productstock)
        {
            wc_add_notice( sprintf( 'You cannot add that amount of "%1$s" to the cart because there is not enough stock (%2$s remaining).', $product->get_title(), $productstock ), 'error' );
            return;
        }
    }
    var_dump($grams);
    return true;
}
0
Bruce Banner 6 अप्रैल 2020, 04:47

1 उत्तर

सबसे बढ़िया उत्तर

जैसा कि मैंने पहले उल्लेख किया है, $_REQUEST का उपयोग आवश्यक नहीं है।

नीचे दिए गए कोड में, मैंने $weight = 40; परीक्षण उद्देश्यों के लिए। मान लें कि आपका get_post_meta सही है? और एक संख्यात्मक मूल्य?

function validate_attribute_weight( $passed, $product_id, $quantity, $variation_id = null, $variations = null ) {
    // Get custom field
    $weight = get_post_meta( $variation_id, 'custom_field', true );

    // FOR TESTING PURPOSES, DELETE AFTERWORDS!!!
    $weight = 40;
    // FOR TESTING PURPOSES, DELETE AFTERWORDS!!!

    if ( ! empty( $weight ) ) {
        // Get product object
        $product = wc_get_product( $product_id );

        // Get current product stock
        $product_stock = $product->get_stock_quantity();

        // ( Weight * quantity ) > product stock
        if( ( ( $weight * $quantity ) > $product_stock ) ) {
            wc_add_notice( sprintf( 'You cannot add that amount of %1$s to the cart because there is not enough stock (%2$s remaining).', $product->get_name(), $product_stock ), 'error' );
            $passed = false;
        }
    }

    return $passed;
}
add_filter( 'woocommerce_add_to_cart_validation', 'validate_attribute_weight', 10, 5 );
1
7uc1f3r 6 अप्रैल 2020, 05:39