In WooCommerce, I have enabled WooCommerce Subscriptions plugin and it's working fine as per my expectations.
However, I have a one custom requirement from client. I want to add custom field(s) while creating a product in Variable Subscriptions and Simple Subscriptions.
I have added custom field(s) in Variable Subscriptions using below code and it's working as per my expectations. Here is my code.
<?php
// Showing fields for variable subscriptions
add_action('woocommerce_product_after_variable_attributes', 'show_WC_Product_Variable_Subscription_Variation_Custom_Fields', 10, 3);
// Saving fields for variable subscriptions
add_action('woocommerce_save_product_variation', 'save_WC_Product_Variable_Subscription_Variation_Custom_Fields', 10, 2);
function show_WC_Product_Variable_Subscription_Variation_Custom_Fields($loop, $variation_data, $variation) {
woocommerce_wp_text_input(
array(
'id' => "my_text_field{$loop}",
'name' => "my_text_field[{$loop}]",
'value' => get_post_meta($variation->ID, 'my_text_field', true),
'label' => __('Some label', 'woocommerce'),
)
);
}
function save_WC_Product_Variable_Subscription_Variation_Custom_Fields($variation_id, $loop) {
if (empty($variation_id)) return;
$text_field = $_POST['my_text_field'][$loop];
update_post_meta($variation_id, 'my_text_field', esc_attr($text_field));
}
And here is how it looks like now working fine.
As you can see in screenshot above, the last field labeled as "Some label" .. my custom field added.
However, I want to add this same field which I set Simple Subscription. Here I mean.
As you can see, I want that same custom fields to show and save here as well ..
I have researched but yet not able to find any hook.
Can someone guide me please how can I achieve this.
Updated:
To add a custom field to Admin product data settings > general tab on simple subscriptions:
// Showing custom fields on admin product settings "general" tab
add_action('woocommerce_product_options_general_product_data', 'add_admin_product_custom_fields', 10, 3);
function add_admin_product_custom_fields() {
global $post;
echo '<div class="product_custom_field show_if_simple show_if_subscription">';
woocommerce_wp_text_input( array(
'id' => 'my_text_field',
'name' => 'my_text_field',
'label' => __('Some label', 'woocommerce'),
) );
echo '</div>';
}
// Saving custom fields values from admin product settings
add_action('woocommerce_admin_process_product_object', 'save_admin_product_custom_fields_values');
function save_admin_product_custom_fields_values( $product ) {
if ( isset($_POST['my_text_field']) ) {
$product->update_meta_data( 'my_text_field', sanitize_text_field($_POST['my_text_field']) );
}
}
Code goes in functions.php file of the active child theme (or active theme). Tested and works.
To display it on simple and variable subscriptions change:
echo '<div class="product_custom_field show_if_simple show_if_subscription">';
with:
echo '<div class="product_custom_field">';
Addition for a checkbox field:
// Showing custom fields on admin product settings "general" tab
add_action('woocommerce_product_options_general_product_data', 'add_admin_product_custom_checkbox_fields', 10, 3);
function add_admin_product_custom_checkbox_fields() {
global $post;
echo '<div class="product_custom_field show_if_simple show_if_subscription">';
echo '<p><strong>' . __("Mindesk e-Commerce", 'woocommerce') . '</strong></p>';
$value = get_post_meta($post->ID, 'mindesk_analytics_opt_out', true);
woocommerce_wp_checkbox(array(
'id' => "mindesk_analytics_opt_out",
'name' => "mindesk_analytics_opt_out",
'wrapper_class' => 'show_if_simple',
'label' => __(' Analytics', 'woocommerce'),
'value' => $value,
) );
echo '</div>';
}
// Saving custom fields values from admin product settings
add_action('woocommerce_admin_process_product_object', 'save_admin_product_custom_checkbox_fields_values');
function save_admin_product_custom_checkbox_fields_values( $product ) {
$value = isset($_POST['mindesk_analytics_opt_out']) ? 'yes' : 'no';
$product->update_meta_data('mindesk_analytics_opt_out', esc_attr($value) );
}
Code goes in functions.php file of the active child theme (or active theme). Tested and works.