1

I've been attempting a to piece together a little code for a client website to include a simple automated deposit function. I'm super basic with PHP, im going into this with VB knowledge from like 2009 so cut me some slack. Trying to use this project to gain a little knowledge.

The Goal

Create a checkbox on the product page, if checked that product will also display a 50% deposit amount under the product price, having an item in the cart with deposit condition set will default the current order payment to 50% of the total. After an order with a deposit, create a new order with "Deposit Remainder".

The Problem
It half works. The prices are updated across the site but I can't get the checkbox to work. I have not yet tried to implement the new order with remainder.

I tried an if statement for the checkbox:

function custom_fields_save_seo( $post_id ){
$woocommerce_checkbox = ( $_POST['deposit_checkbox'] );
 if (isset ($woocommerce_checkbox))
     update_post_meta( $post_id, '_deposit_checkbox', true ) ;
}

Here is what I have so far, it successfully changes the product prices throughout the website.

function add_custom_fields_seo() {
     global $woocommerce, $post;
       // woocommerce_wp_text_input(
       //  array(
         //       'id'      => '_deposit_price',
          //      'label'   => __( 'Deposit price($)', 'woocommerce' ),
          //      'placeholder' => '15',
           //     'desc_tip' => 'true',
            //    'description' => __( 'Enter the custom deposit price here.', 'woocommerce' )
        // )
            
   //  );
        woocommerce_wp_checkbox( 
        array(
        'id'          => 'deposit_checkbox',
        'label'         => __('Agreegation Policy.'),
        'required'  => false,
    ));
    
    
  }
add_action( 'woocommerce_product_options_general_product_data', 'add_custom_fields_seo');

function custom_fields_save_seo( $post_id ){
$woocommerce_text_field = sanitize_text_field( $_POST['_deposit_price'] );
if( is_numeric( $woocommerce_text_field ) || empty( $woocommerce_text_field ) ){
     update_post_meta( $post_id, '_deposit_price', esc_attr( $woocommerce_text_field ) );
}
}
add_action( 'woocommerce_process_product_meta', 'custom_fields_save_seo' );

function filter_woocommerce_get_price( $price, $product ){
$product_id = $product->get_id();
$deposit_price = get_post_meta( $product_id,'_phive_book_price' / 2, true );
if( ! empty( $deposit_price )  ) { 
    return $deposit_price;
}
return 0;
}
add_filter( 'woocommerce_get_price', 'filter_woocommerce_get_price', 10, 2 );
function filter_woocommerce_get_price_html( $price, $product ){
$product_id = $product->get_id();
$product_price = get_post_meta( $product_id, '_phive_book_price', true );
$deposit_price = $product_price / 2;
if( ! empty( $deposit_price )  ) {
    return wc_price($product_price) . ' <i>Deposit: ' . wc_price($deposit_price) . '</i>';
}
return wc_price( $product_price );
}
add_filter( 'woocommerce_get_price_html', 'filter_woocommerce_get_price_html', 10, 2 );
add_filter( 'woocommerce_cart_product_price', 'filter_woocommerce_get_price_html', 10, 2 );


function filter_woocommerce_cart_product_subtotal( $product_subtotal, $product, $quantity ){
$product_id = $product->get_id();
$product_price = get_post_meta( $product_id, '_phive_book_price', true );
$deposit_price = $product_price / 2;
if( ! empty( $deposit_price )  ) {
     return wc_price( $product_price * $quantity ) . ' <i>Deposit: ' . wc_price( $deposit_price * $quantity ) . '</i>';
}
return wc_price( $product_price * $quantity );
}
add_filter( 'woocommerce_cart_product_subtotal', 'filter_woocommerce_cart_product_subtotal', 10, 3 );

Any help is appreciated!

1
  • I would suggest to make this checkbox with JavaScript, maybe vue.js + WordPress rest api and hook into the correct hooks of cart prices
    – BenB
    Mar 26 '20 at 1:15
0

Try this updated code. It should work: You can check this url for more information https://awhitepixel.com/blog/woocommerce-product-data-custom-fields-tabs/

add_action( 'woocommerce_product_options_general_product_data', 'add_custom_fields_seo');

function custom_fields_save_seo( $post_id ){
$product = wc_get_product($post_id);
$num_package = isset($_POST['_deposit_price']) ? $_POST['_deposit_price'] : '';
$product->update_meta_data('_deposit_price', sanitize_text_field($num_package));
$product->save();

}
add_action( 'woocommerce_process_product_meta', 'custom_fields_save_seo' );

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.