I've already had this code on functions.php
This code is to add a new field on each product variation to have datetime input field, so variations would automatically expired when the current date is past the input date.
// Add Variation Settings
add_action( 'woocommerce_product_after_variable_attributes', 'variation_settings_fields', 10, 3 );
// Save Variation Settings
add_action( 'woocommerce_save_product_variation', 'save_variation_settings_fields', 10, 2 );
//Create New fields for Variations
function variation_settings_fields( $loop, $variation_data, $variation ) {
// Text Field
woocommerce_wp_text_input(
array(
'id' => '_text_field_date_expire[' . $variation->ID . ']',
'class' => '_text_field_date_expire',
'type' => 'datetime-local',
'label' => __( 'Date of Expiration', 'woocommerce' ),
'placeholder' => '',
'desc_tip' => 'true',
'description' => __( 'Expiration of Each Product Variation', 'woocommerce' ),
'value' => get_post_meta( $variation->ID, '_text_field_date_expire', true )
)
);
}
//Save New Fields for Variation
function save_variation_settings_fields( $post_id ) {
// Text Field
$text_field = $_POST['_text_field_date_expire'][ $post_id ];
if( ! empty( $text_field ) ) {
update_post_meta( $post_id, '_text_field_date_expire', esc_attr( $text_field ) );
}
}
This is to add a new field on each variation of Wocommerce.
What I am trying to do is to get each "_text_field_date_expire" meta so I could delete expired variation for each of the products..
How do I get each woocommerce variation ID on functions.php so I could add a rule that it will expire when it is already past the current date right now?
var_dump(get_post_meta( $variation_id , '_text_field_date_expire', true ));
This code is the one that I will use to get the datetime field, but not sure how I could get each $variation_id field?
Thanks!
Try this one:
$args = array(
'post_type' => 'product_variation',
'post_status' => array( 'private', 'publish' ),
'numberposts' => -1,
'orderby' => 'menu_order',
'order' => 'asc',
'post_parent' => get_the_ID() // get parent post-ID
);
$variations = get_posts( $args );
foreach ( $variations as $variation ) {
// get variation ID
$variation_ID = $variation->ID;
// get variations meta
$product_variation = new WC_Product_Variation( $variation_ID );
// get variation featured image
$variation_image = $product_variation->get_image();
// get variation price
$variation_price = $product_variation->get_price_html();
get_post_meta( $variation_ID , '_text_field_date_expire', true );
}
Hope this will helps you. For more information:
In WooCommerce 3+, it's $variation->get_id()
from $variation
function argument, which is an instance of the WC_Product_Variation
.
The method get_id()
is inherited from WC_Data
class.
So in your code it should be instead:
'id' => '_text_field_date_expire[' . $variation->get_id() . ']',
Since WooCommerce 3, All
WC_Product
properties can't be accessed directly. Instead, you need to use the available methods.
Also in your hooked function save_variation_settings_fields()
you are declaring 2 arguments, so there is one missing. It should be:
//Save New Fields for Variation// Save Variation Settings
add_action( 'woocommerce_save_product_variation', 'save_variation_settings_fields', 10, 2 );
function save_variation_settings_fields( $variation_id, $i ) {
// Text Field
$text_field = $_POST['_text_field_date_expire'][ $variation_id ];
if( ! empty( $text_field ) ) {
update_post_meta( $variation_id, '_text_field_date_expire', esc_attr( $text_field ) );
}
}
See the source code for woocommerce_save_product_variation
action hook
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With