Nastaven checkbox pravdivý nebo nepravdivý stav s Woocommerce zasedání

hlasů
0

Jedná se o instalační kód:

add_action( 'woocommerce_before_add_to_cart_button', 'output_custom_text_field', 0 );
function output_custom_text_field() {

//Lots of code then:

<input type=checkbox id=option1 name=option1>

}

Chci, že bych měl být schopen pasti / zachytit to v Woocommerce relaci a poté využít v zakázkové cenových kalkulací zde:

function final_cart_update( $cart_object ) {
    foreach ( $cart_object->get_cart() as $cart_item ) {

            // get the custom pricing for this product
            if (isset( $_POST['option1'])) {
            $pricing_custom = get_post_meta( $cart_item['product_id'], '_number_field_1', true );
            }


            // get product price
            $price = floatval( $cart_item['data']->get_price() );

            // set new price
            $cart_item['data']->set_price( $price + $pricing_custom );
    }
}
add_action( 'woocommerce_before_calculate_totals', 'final_cart_update', 99, 1 );

Tato část musí být nějakým způsobem na základě závislé hodnoty relace woocommerce:

if (isset( $_POST['option1'])) {

Skutečná políčko je na produktové stránce:

www.sample.com/product/sample-product/

a

košík je zde:

www.sample.com/cart/
Položena 10/10/2019 v 00:41
zdroj uživatelem
V jiných jazycích...                            


1 odpovědí

hlasů
0

Nemusíte používat žádné relace za to. Použít woocommerce_add_cart_item_datafiltr háček, jako je:

add_action( 'woocommerce_before_add_to_cart_button', 'custom_product_option_checkbox_field' );
function custom_product_option_checkbox_field() {
    echo '<p><label><input type="checkbox" id="option1" name="option1"> '.__("Option 1").'</label></p>';

}

// Add selected add-on option as custom cart item data
add_filter( 'woocommerce_add_cart_item_data', 'filter_add_cart_item_data_callback', 10, 3 );
function filter_add_cart_item_data_callback( $cart_item_data, $product_id, $variation_id ) {
    if ( isset( $_POST['option1'] ) && $pricing_custom = get_post_meta( $product_id, '_number_field_1', true ) ) {
        $cart_item_data['pricing_custom'] = $pricing_custom;
        $cart_item_data['unique_key']     = md5( microtime().rand() ); // Make each item unique
    }
    return $cart_item_data;
}

// Change the product price
add_action( 'woocommerce_before_calculate_totals', 'action_before_calculate_totals_callback', 10, 1 );
function action_before_calculate_totals_callback( $cart ) {
    if ( is_admin() && ! defined( 'DOING_AJAX' ) )
        return;

    // Avoiding hook repetition and price calculation problems
    if ( did_action( 'woocommerce_before_calculate_totals' ) >= 2 )
        return;

    // Loop through cart items
    foreach ( $cart->get_cart() as $cart_item ) {
        if ( isset( $cart_item['pricing_custom'] ) ) {
            // Set the calculated price
            $cart_item['data']->set_price( $cart_item['data']->get_price() + $cart_item['pricing_custom'] );
        }
    }
}

Kód jde v functions.php souboru vašeho aktivního dětského motivu (nebo aktivní téma). Testován a funguje.

Odpovězeno 10/10/2019 v 01:44
zdroj uživatelem

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more