Created
January 24, 2021 12:07
-
-
Save mzdebo/308b638dab46d036331136162a0c0b04 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
https://stackoverflow.com/questions/39007426/adding-programmatically-a-custom-settings-tab-to-admin-product-data-in-woocommer | |
// Step 1 - Adding a custom tab to the Products Metabox | |
add_filter( 'woocommerce_product_data_tabs', 'add_shipping_costs_product_data_tab', 99 , 1 ); | |
function add_shipping_costs_product_data_tab( $product_data_tabs ) { | |
$product_data_tabs['shipping-costs'] = array( | |
'label' => __( 'Shipping costs', 'my_theme_domain' ), // translatable | |
'target' => 'shipping_costs_product_data', // translatable | |
); | |
return $product_data_tabs; | |
} | |
// Step 2 - Adding and POPULATING (with data) custom fields in custom tab for Product Metabox | |
add_action( 'woocommerce_product_data_panels', 'add_shipping_costs_product_data_fields' ); | |
function add_shipping_costs_product_data_fields() { | |
global $post; | |
$post_id = $post->ID; | |
echo '<div id="shipping_costs_product_data" class="panel woocommerce_options_panel">'; | |
## THE 6 DIFFERENT FIELD TYPES | |
# 1. Text input field | |
woocommerce_wp_text_input( array( | |
'id' => '_input_text', | |
// 'name' => '_input_text', // (optional) for different ID attribute than name attribute | |
// 'class' => 'some-class', // (optional) | |
// 'wrapper_class' => 'show_if_simple', // (optional) example here for simple products type only | |
'placeholder' => __( 'Enter some data', 'theme_domain' ), // (optional) | |
'label' => __( 'input text Label', 'theme_domain' ), // (optional) | |
'description' => __( 'input text Description', 'theme_domain' ), // (optional) | |
'desc_tip' => true, // (optional) To show the description as a tip | |
// 'data_type' => '', // (optional formatting options) can be 'price', 'decimal', 'stock' or 'url' | |
// 'type' => '', // (optional additional custom attribute) | |
// 'value' => $value, // (optional) for a static value (can be conditionally set for $value variable) | |
) ); | |
// 2. Textarea input field | |
woocommerce_wp_textarea_input( array( | |
'id' => '_input_textarea', | |
// 'name' => 'input_textarea', // (optional) for different ID attribute than name attribute | |
'class' => 'widefat', // (optional) | |
// 'style' => '' // (optional) | |
// 'wrapper_class' => 'show_if_simple', // (optional) example here for simple products type only | |
'placeholder' => __( 'Enter some data', 'theme_domain' ), // (optional) | |
'label' => __( 'input textarea Label', 'theme_domain' ), | |
'description' => __( 'input textarea Description', 'theme_domain' ), | |
'desc_tip' => true, // (optional) To show the description as a tip | |
// 'rows' => 2, // (optional) defining number of rows | |
// 'cols' => 20, // (optional) defining number of columns | |
// 'value' => $value, // (optional) for a static value (can be conditionally set for $value variable) | |
) ); | |
// 3. Checkbox field | |
woocommerce_wp_checkbox( array( | |
'id' => '_input_checkbox', | |
// 'name' => 'input_checkbox', // (optional) for different ID attribute than name attribute | |
// 'class' => 'some-class', // (optional) | |
// 'wrapper_class' => 'show_if_simple', // (optional) example here for simple products type only | |
'label' => __( 'input checkbox Label', 'theme_domain' ), | |
'description' => __( 'input checkbox Description', 'theme_domain' ), | |
'desc_tip' => true, // (optional) To show the description as a tip | |
// 'cbvalue' => 'yes', // to make it selected by default | |
// 'value' => $value, // (optional) for a static value (can be conditionally set for $value variable) | |
) ); | |
// 4. Radio Buttons field | |
woocommerce_wp_radio( array( | |
'id' => '_input_radio', | |
// 'name' => 'input_radio', // (optional) for different ID attribute than name attribute | |
// 'class' => 'some-class', // (optional) | |
// 'wrapper_class' => 'show_if_simple', // (optional) example here for simple products type only | |
'label' => __(' ', 'my_theme_domain'), | |
'description' => __( 'input Radio Description', 'my_theme_domain' ), | |
'desc_tip' => true, | |
'options' => array( | |
'option_value_1' => __('Displayed option 1'), | |
'option_value_2' => __('Displayed option 2'), | |
'option_value_3' => __('Displayed option 3'), | |
), | |
// 'value' => $value, // (optional) for a static value (can be conditionally set for $value variable) | |
) ); | |
// 5. Select field | |
woocommerce_wp_select( array( | |
'id' => '_select_field', | |
// 'name' => '_select_field', // (optional) for different ID attribute than name attribute | |
// 'wrapper_class' => 'show_if_simple', // (optional) example here for simple products type only | |
'label' => __(' ', 'my_theme_domain'), | |
'description' => __( 'input Radio Description', 'my_theme_domain' ), | |
'desc_tip' => true, | |
'options' => array( | |
'' => __('Chose an option'), // Default empty value | |
'option_value_1' => __('Displayed option 1'), | |
'option_value_2' => __('Displayed option 2'), | |
'option_value_3' => __('Displayed option 3') | |
), | |
// 'value' => $value, // (optional) for a static value (can be conditionally set for $value variable) | |
) ); | |
// 6. Hidden input field | |
woocommerce_wp_hidden_input( array( | |
'id' => '_hidden_input', | |
// 'name' => '_hidden_input', // (optional) for different ID attribute than name attribute | |
'class' => 'some_class', | |
// 'value' => $value, // (optional) for a static value (can be conditionally set for $value variable) | |
) ); | |
echo '</div>'; | |
} | |
// Step 3 - Saving custom fields data of custom products tab metabox | |
add_action( 'woocommerce_process_product_meta', 'shipping_costs_process_product_meta_fields_save' ); | |
function shipping_costs_process_product_meta_fields_save( $post_id ){ | |
// save the text field data | |
if( isset( $_POST['_input_text'] ) ) | |
update_post_meta( $post_id, '_input_text', esc_attr( $_POST['_input_text'] ) ); | |
// save the textarea field data | |
if( isset( $_POST['_input_textarea'] ) ) | |
update_post_meta( $post_id, '_input_textarea', esc_attr( $_POST['_input_textarea'] ) ); | |
// save the checkbox field data | |
if( isset( $_POST['_input_checkbox'] ) ) | |
update_post_meta( $post_id, '_input_checkbox', esc_attr( $_POST['_input_checkbox'] ) ); | |
// save the radio button field data | |
if( isset( $_POST['_input_radio'] ) ) | |
update_post_meta( $post_id, '_input_radio', esc_attr( $_POST['_input_radio'] ) ); | |
// save the selector field data | |
if( isset( $_POST['_select_field'] ) ) | |
update_post_meta( $post_id, '_select_field', esc_attr( $_POST['_select_field'] ) ); | |
// save the hidden input data | |
if( isset( $_POST['_hidden_input'] ) ) | |
update_post_meta( $post_id, '_hidden_input', esc_attr( $_POST['_hidden_input'] ) ); | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment