-
-
Save basepack/09fdbdd569020e2a0ff1 to your computer and use it in GitHub Desktop.
| <?php | |
| //Display Fields | |
| add_action( 'woocommerce_product_after_variable_attributes', 'variable_fields', 10, 3 ); | |
| //JS to add fields for new variations | |
| add_action( 'woocommerce_product_after_variable_attributes_js', 'variable_fields_js' ); | |
| //Save variation fields | |
| add_action( 'woocommerce_save_product_variation', 'save_variable_fields', 10, 1 ); | |
| /** | |
| * Create new fields for variations | |
| * | |
| */ | |
| function variable_fields( $loop, $variation_data, $variation ) { | |
| ?> | |
| <tr> | |
| <td> | |
| <?php | |
| // Text Field | |
| woocommerce_wp_text_input( | |
| array( | |
| 'id' => '_text_field['.$loop.']', | |
| 'label' => __( 'My Text Field', 'woocommerce' ), | |
| 'placeholder' => 'http://', | |
| 'desc_tip' => 'true', | |
| 'description' => __( 'Enter the custom value here.', 'woocommerce' ), | |
| 'value' => get_post_meta($variation->ID, '_text_field'], true) | |
| ) | |
| ); | |
| ?> | |
| </td> | |
| </tr> | |
| <tr> | |
| <td> | |
| <?php | |
| // Number Field | |
| woocommerce_wp_text_input( | |
| array( | |
| 'id' => '_number_field['.$loop.']', | |
| 'label' => __( 'My Number Field', 'woocommerce' ), | |
| 'desc_tip' => 'true', | |
| 'description' => __( 'Enter the custom number here.', 'woocommerce' ), | |
| 'value' => get_post_meta($variation->ID, '_number_field'], true), | |
| 'custom_attributes' => array( | |
| 'step' => 'any', | |
| 'min' => '0' | |
| ) | |
| ) | |
| ); | |
| ?> | |
| </td> | |
| </tr> | |
| <tr> | |
| <td> | |
| <?php | |
| // Textarea | |
| woocommerce_wp_textarea_input( | |
| array( | |
| 'id' => '_textarea['.$loop.']', | |
| 'label' => __( 'My Textarea', 'woocommerce' ), | |
| 'placeholder' => '', | |
| 'description' => __( 'Enter the custom value here.', 'woocommerce' ), | |
| 'value' => get_post_meta($variation->ID, '_textarea'], true) | |
| ) | |
| ); | |
| ?> | |
| </td> | |
| </tr> | |
| <tr> | |
| <td> | |
| <?php | |
| // Select | |
| woocommerce_wp_select( | |
| array( | |
| 'id' => '_select['.$loop.']', | |
| 'label' => __( 'My Select Field', 'woocommerce' ), | |
| 'description' => __( 'Choose a value.', 'woocommerce' ), | |
| 'value' => get_post_meta($variation->ID, '_select'], true), | |
| 'options' => array( | |
| 'one' => __( 'Option 1', 'woocommerce' ), | |
| 'two' => __( 'Option 2', 'woocommerce' ), | |
| 'three' => __( 'Option 3', 'woocommerce' ) | |
| ) | |
| ) | |
| ); | |
| ?> | |
| </td> | |
| </tr> | |
| <tr> | |
| <td> | |
| <?php | |
| // Checkbox | |
| woocommerce_wp_checkbox( | |
| array( | |
| 'id' => '_checkbox['.$loop.']', | |
| 'label' => __('My Checkbox Field', 'woocommerce' ), | |
| 'description' => __( 'Check me!', 'woocommerce' ), | |
| 'value' => get_post_meta($variation->ID, '_checkbox'], true) | |
| ) | |
| ); | |
| ?> | |
| </td> | |
| </tr> | |
| <tr> | |
| <td> | |
| <?php | |
| // Hidden field | |
| woocommerce_wp_hidden_input( | |
| array( | |
| 'id' => '_hidden_field['.$loop.']', | |
| 'value' => 'hidden_value' | |
| ) | |
| ); | |
| ?> | |
| </td> | |
| </tr> | |
| <?php | |
| } | |
| /** | |
| * Create new fields for new variations | |
| * | |
| */ | |
| function variable_fields_js() { | |
| ?> | |
| <tr> | |
| <td> | |
| <?php | |
| // Text Field | |
| woocommerce_wp_text_input( | |
| array( | |
| 'id' => '_text_field[ + loop + ]', | |
| 'label' => __( 'My Text Field', 'woocommerce' ), | |
| 'placeholder' => 'http://', | |
| 'desc_tip' => 'true', | |
| 'description' => __( 'Enter the custom value here.', 'woocommerce' ), | |
| 'value' => '' | |
| ) | |
| ); | |
| ?> | |
| </td> | |
| </tr> | |
| <tr> | |
| <td> | |
| <?php | |
| // Number Field | |
| woocommerce_wp_text_input( | |
| array( | |
| 'id' => '_number_field[ + loop + ]', | |
| 'label' => __( 'My Number Field', 'woocommerce' ), | |
| 'desc_tip' => 'true', | |
| 'description' => __( 'Enter the custom number here.', 'woocommerce' ), | |
| 'value' => '', | |
| 'custom_attributes' => array( | |
| 'step' => 'any', | |
| 'min' => '0' | |
| ) | |
| ) | |
| ); | |
| ?> | |
| </td> | |
| </tr> | |
| <tr> | |
| <td> | |
| <?php | |
| // Textarea | |
| woocommerce_wp_textarea_input( | |
| array( | |
| 'id' => '_textarea[ + loop + ]', | |
| 'label' => __( 'My Textarea', 'woocommerce' ), | |
| 'placeholder' => '', | |
| 'description' => __( 'Enter the custom value here.', 'woocommerce' ), | |
| 'value' => '', | |
| ) | |
| ); | |
| ?> | |
| </td> | |
| </tr> | |
| <tr> | |
| <td> | |
| <?php | |
| // Select | |
| woocommerce_wp_select( | |
| array( | |
| 'id' => '_select[ + loop + ]', | |
| 'label' => __( 'My Select Field', 'woocommerce' ), | |
| 'description' => __( 'Choose a value.', 'woocommerce' ), | |
| 'value' => '', | |
| 'options' => array( | |
| 'one' => __( 'Option 1', 'woocommerce' ), | |
| 'two' => __( 'Option 2', 'woocommerce' ), | |
| 'three' => __( 'Option 3', 'woocommerce' ) | |
| ) | |
| ) | |
| ); | |
| ?> | |
| </td> | |
| </tr> | |
| <tr> | |
| <td> | |
| <?php | |
| // Checkbox | |
| woocommerce_wp_checkbox( | |
| array( | |
| 'id' => '_checkbox[ + loop + ]', | |
| 'label' => __('My Checkbox Field', 'woocommerce' ), | |
| 'description' => __( 'Check me!', 'woocommerce' ), | |
| 'value' => '', | |
| ) | |
| ); | |
| ?> | |
| </td> | |
| </tr> | |
| <tr> | |
| <td> | |
| <?php | |
| // Hidden field | |
| woocommerce_wp_hidden_input( | |
| array( | |
| 'id' => '_hidden_field[ + loop + ]', | |
| 'value' => 'hidden_value' | |
| ) | |
| ); | |
| ?> | |
| </td> | |
| </tr> | |
| <?php | |
| } | |
| /** | |
| * Save new fields for variations | |
| * | |
| */ | |
| function save_variable_fields( $post_id ) { | |
| if (isset( $_POST['variable_sku'] ) ) : | |
| $variable_sku = $_POST['variable_sku']; | |
| $variable_post_id = $_POST['variable_post_id']; | |
| // Text Field | |
| $_text_field = $_POST['_text_field']; | |
| for ( $i = 0; $i < sizeof( $variable_sku ); $i++ ) : | |
| $variation_id = (int) $variable_post_id[$i]; | |
| if ( isset( $_text_field[$i] ) ) { | |
| update_post_meta( $variation_id, '_text_field', stripslashes( $_text_field[$i] ) ); | |
| } | |
| endfor; | |
| // Number Field | |
| $_number_field = $_POST['_number_field']; | |
| for ( $i = 0; $i < sizeof( $variable_sku ); $i++ ) : | |
| $variation_id = (int) $variable_post_id[$i]; | |
| if ( isset( $_text_field[$i] ) ) { | |
| update_post_meta( $variation_id, '_number_field', stripslashes( $_number_field[$i] ) ); | |
| } | |
| endfor; | |
| // Textarea | |
| $_textarea = $_POST['_textarea']; | |
| for ( $i = 0; $i < sizeof( $variable_sku ); $i++ ) : | |
| $variation_id = (int) $variable_post_id[$i]; | |
| if ( isset( $_textarea[$i] ) ) { | |
| update_post_meta( $variation_id, '_textarea', stripslashes( $_textarea[$i] ) ); | |
| } | |
| endfor; | |
| // Select | |
| $_select = $_POST['_select']; | |
| for ( $i = 0; $i < sizeof( $variable_sku ); $i++ ) : | |
| $variation_id = (int) $variable_post_id[$i]; | |
| if ( isset( $_select[$i] ) ) { | |
| update_post_meta( $variation_id, '_select', stripslashes( $_select[$i] ) ); | |
| } | |
| endfor; | |
| // Checkbox | |
| $_checkbox = $_POST['_checkbox']; | |
| for ( $i = 0; $i < sizeof( $variable_sku ); $i++ ) : | |
| $variation_id = (int) $variable_post_id[$i]; | |
| if ( isset( $_checkbox[$i] ) ) { | |
| update_post_meta( $variation_id, '_checkbox', stripslashes( $_checkbox[$i] ) ); | |
| } | |
| endfor; | |
| // Hidden field | |
| $_hidden_field = $_POST['_hidden_field']; | |
| for ( $i = 0; $i < sizeof( $variable_sku ); $i++ ) : | |
| $variation_id = (int) $variable_post_id[$i]; | |
| if ( isset( $_hidden_field[$i] ) ) { | |
| update_post_meta( $variation_id, '_hidden_field', stripslashes( $_hidden_field[$i] ) ); | |
| } | |
| endfor; | |
| endif; | |
| } |
WooCommerce 3 just came out. The function responsible for saving the data should be changed to something like this:
function save_custom_wc_fields( $variation_id, $i) {
if (isset( $_POST["variable_sku"] ) ) {
$_text_field = isset($_POST["_my-super-duper-field"]) ? $_POST["_my-super-duper-field"] : false;
if ($_text_field) {
update_post_meta( $variation_id, "_rehvi-moot", stripslashes( $_text_field[$i] ) );
}
}
}
get_post_meta($variation_id, '_class_duration', true);
to display it in the frontend, where _class_duration is the name of my variable. As I saved just a number I want it to be returned not as an array but the value which is why I use the true.
See https://developer.wordpress.org/reference/functions/get_post_meta/ for further details.
Full code looks like this:
$all_orders = get_posts( array(
'numberposts' => -1,
'meta_key' => '_customer_user',
'meta_value' => get_current_user_id(),
'post_type' => wc_get_order_types(),
'post_status' => array_keys( wc_get_order_statuses() ),
) );
foreach($all_orders as $order){
$order_id = $order->ID;
$order = wc_get_order($order_id);
foreach ($order->get_items() as $item_id => $item_obj) {
$variation_id = $item_obj->get_variation_id();
$months = get_post_meta($variation_id, _class_duration, true);
echo $months;
}
}
(Sorry, seems like the code is not correctly recognised as one by syntax highlighting. Not sure why)
Hope it helps anyway.
Best
Felix
Hello there,
just noticed there are brackets
]in the lines 27, 43, 63, 78, 98, in the second parameter of the functionget_post_metacorrespondingly, making the code break. Found them all by searching'],Thanks for sharing!
Bests,
Richard