Move product meta to the description tab in WooCommerce - php

How to move the product meta to the beginning of the product description tab?
I try:
remove_action( 'woocommerce_single_product_summary', 'woocommerce_template_single_meta', 40 );
add_action( 'woocommerce_product_tabs_description', 'woocommerce_template_single_meta', 10 );
Remove works, but add_action() doesn't.

You can keep the first code line. Then to insert single product meta on product description tab, before description, you can use 2 different ways:
1). Using Hooks as follows:
remove_action( 'woocommerce_single_product_summary', 'woocommerce_template_single_meta', 40 );
add_filter( 'woocommerce_product_tabs', 'woocommerce_custom_product_tabs', 999 );
function woocommerce_custom_product_tabs( $tabs ) {
// We overwrite the callback function with a custom one
$tabs['description']['callback'] = 'woocommerce_product_meta_and_description_tab';
// (optional) We can also overwrite the title
$tabs['description']['title'] = __('Meta and description', 'woocommerce');
return $tabs;
}
function woocommerce_product_meta_and_description_tab() { // this is where you indicate what appears in the description tab
wc_get_template( 'single-product/meta.php' ); // The meta content first
wc_get_template( 'single-product/tabs/description.php' ); // The product description after
}
Code goes in functions.php file of the active child theme (or active theme). Tested and works.
2). Or Overriding templates:
You can override single-product/tabs/description.php template file via your theme as explained in this official documentation.
Once you have copied the file to the woocommerce folder inside your active theme, open edit single-product/tabs/description.php file and add the following line inside it:
wc_get_template( 'single-product/meta.php' );
It will displays the product meta information inside the product description tab.
Don't forget to keep in your active child theme's functions.php file:
remove_action( 'woocommerce_single_product_summary', 'woocommerce_template_single_meta', 40 );
Related: WooCommerce action hooks and overriding templates

There actually is a way to do this within your functions without copying files from woocommerce and overriding them in your child theme.
Per WooCommerce documentation, you can customize the product data tabs. With a small modification to the code they provided, you can do what you're asking:
/**
* Customize product data tabs
*/
add_filter( 'woocommerce_product_tabs', 'woo_custom_description_tab', 98 );
function woo_custom_description_tab( $tabs ) {
$tabs['description']['callback'] = 'woo_custom_description_tab_content'; // Custom description callback
return $tabs;
}
function woo_custom_description_tab_content() { // this is where you indicate what appears in the description tab
wc_get_template( 'single-product/meta.php' ); // add this to add meta to content
the_content(); // keep this in to preserve original functionality
}

Related

How to hide Woocommerce product Description tab only for unlogged users?

How to hide product "Description" tab' in Woocommerce plugin only for unlogged users, but visible for registered customers (and logged-in users).
To remove product description tab on sigle product pages for non logged users, you will use:
add_filter( 'woocommerce_product_tabs', 'customize_product_tabs', 100 );
function customize_product_tabs( $tabs ) {
if ( ! is_user_logged_in() ) {
unset( $tabs['description'] ); // remove the description tab
}
return $tabs;
}
This code goes in functions.php file of your active child theme (or active theme). Tested and works.
Try this, add this snippet into the function.php
add_action( 'init', 'hide_price_add_cart_not_logged_in' );
function hide_price_add_cart_not_logged_in() {
if ( !is_user_logged_in() ) {
//Remove short description (excerpt) from single product page
remove_action( 'woocommerce_product_tabs', 'woocommerce_template_single_excerpt', 20 );
}
}

Hide WooCommerce Product Meta (SKU, Categories, Tags) For Specific Pages Using Wordpress Custom Fields

You might also be asking: How do I trigger/define a WooCommerce action/function using WordPress Custom Fields?
Using WooCommerce and Wordpress, I've finished making a system whereby I can remove the product meta but only on certain product pages, and I need to define which pages are to have their product meta hidden using wordpress custom fields. The custom field name I want to call: 'hide_product_meta' and the defining values need to be either '1' or '0' for yes or no.
To be hidden:
I first had a go at creating a filter to do it. I've since edited this post to include the suggestion that lakshman rajput commented below.
This code hides the product meta on pages with a pre-created custom field called 'hide_product_meta' which you can add manually. Define a '1' in the custom field to trigger the code, or anything else to turn it off:
/* WooCommerce hide product page meta - hide_product_meta */
function hide_product_page_meta() {
global $post;
$product_id = $post->ID;
$HideProductMetaValue = get_post_meta($product_id,'hide_product_meta',true);
if (strpos($HideProductMetaValue, '1') !== false) {
return remove_action( 'woocommerce_single_product_summary', 'woocommerce_template_single_meta', 40 );
remove_action( 'woocommerce_after_single_product_summary', 'action_woocommerce_after_single_product_summary', 10, 2 );
}
}
add_action('woocommerce_single_product_summary','hide_product_page_meta');
Thank you.
With lakshman rajput's help, I managed to get it to work using the following code, but instead of defining the action with 'yes' or 'no', I can define it with '1', like this:
/* WooCommerce hide product page meta - hide_product_meta */
function hide_product_page_meta() {
global $post;
$product_id = $post->ID;
$HideProductMetaValue = get_post_meta($product_id,'hide_product_meta',true);
if (strpos($HideProductMetaValue, '1') !== false) {
return remove_action( 'woocommerce_single_product_summary', 'woocommerce_template_single_meta', 40 );
remove_action( 'woocommerce_after_single_product_summary', 'action_woocommerce_after_single_product_summary', 10, 2 );
}
}
add_action('woocommerce_single_product_summary','hide_product_page_meta');

Add a shortcode under variation selectors in Woocommerce single variable product

I would like to add a shortcode under variation selector and above add to cart button so it would open up a size chart, just like here:
I got the shortcode, but I don't know what code to use to make it appear in that specific area.
Try the following (before the selected variation price):
add_action( 'woocommerce_before_single_variation', 'add_shortcode_before_single_variation', 20 );
function add_shortcode_before_single_variation(){
global $product;
// HERE comes your shortcode
echo do_shortcode( "[my_shortcode attr='blabla']" );
}
OR this one instead (after the selected variation price):
add_action( 'woocommerce_single_variation', 'add_shortcode_before_single_variation', 15 );
function add_shortcode_before_single_variation(){
global $product;
// HERE comes your shortcode
echo do_shortcode( "[my_shortcode attr='blabla']" );
}
Code goes in function.php file of your active child theme (or theme).
it should work (replacing my fake shortcode with yours)…

Rename Description tab in Woocommerce single product page

I pasted this code in function.php, but it didn't rename the product page tab as it supposed to (http://www.noushasasart.com/product/harsh-bark/)
function woo_remove_product_tabs($tabs) {
unset($tabs['reviews']); // Remove the reviews tab
$tabs['description']['title'] = __('Additional Information'); // Rename the
description tab
return $tabs;
}
how can I solve this?
You have forgotten the filter hook:
add_filter( 'woocommerce_product_tabs', 'woo_customize_tabs', 100, 1 );
function woo_customize_tabs( $tabs ) {
unset($tabs['reviews']); // Remove the reviews tab
$tabs['description']['title'] = __( 'More Information' ); // Rename the description tab
return $tabs;
}
Code goes in function.php file of your active child theme (or theme) or also in any plugin file.
All code is tested on Woocommerce 3+ and works.
Update (related to your comment) | Rename product description heading (inside the tab):
To rename description heading use woocommerce_product_description_heading filter hook this way:
add_filter( 'woocommerce_product_description_heading', 'rename_product_description_heading', 10, 1 );
function rename_product_description_heading( $heading ) {
return __( 'Additional Information', 'woocommerce' );
}
Code goes in function.php file of your active child theme (or theme) or also in any plugin file.
All code is tested on Woocommerce 3+ and works.
Official related documentation: Editing product data tabs

How to remove woocommerce tab?

the products in our woocommerce shop don't need any of the default tabs so I have managed to disable them being that I only need to have the product description below the product however, while I want to keep the actual description, I believe the tab itself is redundant since there aren't any other tabs.
Basically, I want to remove the tab's & title altogether but keep the content box below it without modifying the woocommerce core php template file. Is there a way to add a filter to my WordPress theme's functions.php?
function woocommerce_default_product_tabs( $tabs = array() ) {
global $product, $post;
// Description tab - shows product content
if ( $post->post_content ) {
$tabs['description'] = array(
'title' => __( 'Description', 'woocommerce' ),
'priority' => 10,
'callback' => 'woocommerce_product_description_tab'
);
}
While CSS is great, if the stylesheet doesn't load correctly, you could end up showing someone tabs without meaning to. It is best to remove the content before loading (server side), by using a filter, as you had mentioned.
See code below as provided from Woothemes for unsetting data tabs.
EDIT Place within the functions.php file inside your theme.
add_filter( 'woocommerce_product_tabs', 'woo_remove_product_tabs', 98 );
function woo_remove_product_tabs( $tabs ) {
unset( $tabs['description'] ); // Remove the description tab
unset( $tabs['reviews'] ); // Remove the reviews tab
unset( $tabs['additional_information'] ); // Remove the additional information tab
return $tabs;
}
EDIT As noted by #BasvanDijk
To remove altogether, you can use the following
add_filter( 'woocommerce_product_tabs', '__return_empty_array', 98 );
If you want to remove tabs from woo-commerce product details page, then add this code in your function.php
Option 1-
Go to functions.php and Add the following code.
(Go to Admin panel > Appearance > Editor > functions.php)
add_filter( 'woocommerce_product_tabs', 'woo_remove_tabs', 98 );
function woo_remove_tabs( $tabs ){
if(is_product()){
unset( $tabs['description'] ); // Remove the description tab
unset( $tabs['reviews'] ); // Remove the reviews tab
unset( $tabs['additional_information'] ); // Remove the additional information tab
}
return $tabs;
}
By using this filter we can Remove the tabs From the Woocommerce Product Pages.
Option 2-
Or for an alternative approach just add this to your functions.php
remove_action( 'woocommerce_after_single_product_summary', 'woocommerce_output_product_data_tabs', 10);
Option 3-
Hide the tab by adding this to the bottom of woocommerce.css
.woocommerce_tabs .tabs {
display: none;
}
Read more -Woo-commerce: Remove tab from product page
add_filter( 'woocommerce_product_tabs', 'woo_remove_product_tabs', 98 );
function woo_remove_product_tabs( $tabs ) {
unset( $tabs['description'] ); // Remove the description tab
unset( $tabs['reviews'] ); // Remove the reviews tab
unset( $tabs['additional_information'] ); // Remove the additional information tab
return $tabs;
}
function woocommerce_template_product_description() {
woocommerce_get_template( 'single-product/tabs/description.php' );
}
add_action( 'woocommerce_after_single_product_summary', 'woocommerce_template_product_description', 40 );
This work for me with the contributions i got here. Other than removing the tab and also to place back the text.
Credits to Swapnali & Mustafa
Here is the working code:
add_filter( 'woocommerce_product_tabs', 'wcs_woo_remove_reviews_tab', 98 );
function wcs_woo_remove_reviews_tab($tabs) {
unset($tabs['reviews']);
return $tabs;
}
for some reason the code to add to functions.php file did not work for me, even tho it is in the woo commerce codex.
I was getting lots of comment spam to these products that showed reviews.
in the end I manually removed the review tab from all the products using built in wordpress/woocommerce functionality.
go to the product lising page
click the checkbox to select all products (it will only select the products on this page so you may have to go thru several pages to repeat)
from the bulk actions drop down, select edit
click apply
you will now see all the bulk edit actions you can do. Choose the "comments" drop down, and select "Do not allow"
click update
make sure to delete any cache if using a caching plugin
Excuse me but the question is not only removing tabs but also keeping the product description. If you ever tried the code above you would realize that while removing tabs you are actually removing the product description. And this is not the desired case.
You should somewhere add the following code to add it back. But unfortunately this time you can add the description side by side the picture and making a narrow column. I couldn't find the solution to add it nicely below the picture where the tabs existed before.
The code:
function woocommerce_template_product_description() {
woocommerce_get_template( 'single-product/tabs/description.php' );
}
add_action( 'woocommerce_single_product_summary', 'woocommerce_template_product_description', 40 );
Using a combination of the answers above, nesting the function within the action so you can use within a conditional:
add_action( 'wp', 'custom_remove_tabs_by_tag' );
function custom_remove_tabs_by_tag() {
if ( is_product() && has_term( 'tag-term', 'product_tag' ) )
{
// Remove All Product Tabs
remove_action( 'woocommerce_after_single_product_summary', 'woocommerce_output_product_data_tabs', 10 );
// Add Product Description
add_action( 'woocommerce_after_single_product_summary',
function () { woocommerce_get_template( 'single-product/tabs/description.php' );},
40 );
}

Categories