Last active
January 5, 2023 02:03
-
-
Save manuelhudec/5f9d73d5f8f4632da3b2e59e3002c563 to your computer and use it in GitHub Desktop.
WooCommerce custom tabs per product
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
// Use the following code and paste it into the Code Snippets plugin or functions.php of your child theme. | |
// After that you will find a new meta box in the WooCommerce products. | |
// Everything you enter there will appear in the single product as a new tab. | |
// In line 17 you can give your meta box a title | |
// In line 88 you can give your tab a title | |
// Adding a custom Meta container to admin products pages | |
add_action( 'add_meta_boxes', 'create_custom_meta_box' ); | |
if ( ! function_exists( 'create_custom_meta_box' ) ) | |
{ | |
function create_custom_meta_box() | |
{ | |
add_meta_box( | |
'custom_product_shipping_field', | |
__( 'YOUR-META-BOX-TITLE', 'woocommerce' ), | |
'add_custom_content_meta_box', | |
'product', | |
'normal', | |
'high' | |
); | |
} | |
} | |
// Custom metabox content in admin product pages | |
if ( ! function_exists( 'add_custom_content_meta_box' ) ) | |
{ | |
function add_custom_content_meta_box( $post ) | |
{ | |
$value = get_post_meta( $post->ID, '_shipping_tab', true ) ? get_post_meta( $post->ID, '_shipping_tab', true ) : ''; | |
wp_editor( $value, 'custom_shipping_tab', array( 'editor_height' => 100 ) ); | |
echo '<input type="hidden" name="custom_product_field_nonce" value="' . wp_create_nonce() . '">'; | |
} | |
} | |
//Save the data of the Meta field | |
add_action( 'save_post', 'save_custom_content_meta_box', 10, 1 ); | |
if ( ! function_exists( 'save_custom_content_meta_box' ) ) | |
{ | |
function save_custom_content_meta_box( $post_id ) { | |
// We need to verify this with the proper authorization (security stuff). | |
// Check if our nonce is set. | |
if ( ! isset( $_POST[ 'custom_product_field_nonce' ] ) ) { | |
return $post_id; | |
} | |
$nonce = $_REQUEST[ 'custom_product_field_nonce' ]; | |
//Verify that the nonce is valid. | |
if ( ! wp_verify_nonce( $nonce ) ) { | |
return $post_id; | |
} | |
// If this is an autosave, our form has not been submitted, so we don't want to do anything. | |
if ( defined( 'DOING_AUTOSAVE' ) && DOING_AUTOSAVE ) { | |
return $post_id; | |
} | |
// Check the user's permissions. | |
if ( 'page' == $_POST[ 'post_type' ] ) { | |
if ( ! current_user_can( 'edit_page', $post_id ) ) { | |
return $post_id; | |
} | |
} else { | |
if ( ! current_user_can( 'edit_post', $post_id ) ) { | |
return $post_id; | |
} | |
} | |
// --- Its safe for us to save the data ! --- // | |
// Sanitize user input and update the meta field in the database. | |
update_post_meta( $post_id, '_shipping_tab', wp_kses_post($_POST[ 'custom_shipping_tab' ]) ); | |
} | |
} | |
// Add product custom "Shipping" tab | |
add_filter( 'woocommerce_product_tabs', 'woo_new_product_tab' ); | |
function woo_new_product_tab( $tabs ) { | |
$tabs['test_tab'] = array( | |
'title' => __( 'YOUR-TAB-NAME-GOES-HERE', 'woocommerce' ), | |
'priority' => 50, | |
'callback' => 'shipping_product_tab_content' | |
); | |
return $tabs; | |
} | |
// The Shipping tab content | |
function shipping_product_tab_content() { | |
// The new tab content | |
$prod_id = get_the_ID(); | |
echo'<div><p>'.get_post_meta( get_the_ID(), '_shipping_tab' ,true ).'</p></div>'; | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment