-
AuthorSearch Results
-
In reply to: How do I remove Description & Additional Information
If you want to remove it from all your single products pages it is possible to be done by css or function.
If you want to remove it from a specific single product/s page it is posibble to be done only by function.
Add this in your child theme functions file:
function woo_remove_custom_product_tabs( $tabs ) {
unset( $tabs[‘description’] );
unset( $tabs[‘additional_information’] );
return $tabs;
}
add_filter( ‘woocommerce_product_tabs’, ‘woo_remove_custom_product_tabs’, 98 );With css – just set display:none;
In reply to: Hide tabs
Hello,
Please remove the shopping information from the Theme Settings > Product page > Tabs.
Then add the shipping information in the Additional tab on the product page in those products where you want to show this tab.
Best Regards
testing123ParticipantMarch 7, 2021 at 2:54 am #271547Dear All,
As many are waking up to the Core Web Vitals (including myself), I decided to write down in a few paragraphs my journey to improve the core web vitals of my site. Most of the recommendations probably apply to other themes as well but I’m using the fantastic theme Woodmart and saw great improvements when taking these actions.
I am not affiliated to XTEMOS or any of the plugins I recommend here, these are simply the products that I use and work well for me (yes, I’ve tested many others). All recommendations are just my opinions from my experiences. I welcome others to please expand on this post and share their experiences of what works for them. It may not be complete or perfect – use at your own risk, make a backup of your site before you do any of this!
- I’m going to start out with an overlooked feature of woodmart that is extremely powerful and will shrink down your CSS dramatically. Especially when looking at core web vitals and google page speed this will have a positive effect on your score.
- Woodmart link -> CSS Generator
Go through the list of CSS and turn off everything you don’t use. Save the file, clear your cache and check your site. Do this over and over again until you removed all the items you are not using - Woodmart link -> (in case you use WPBakery) WPBakery CSS Generator (I unchecked all) and generated the file and no changes occurred to my site
- Woodmart link -> CSS Generator
- Ensure you are hosting your site on a reputable and fast hosting provider (hostgator, bluest etc. are not great) . I’m not going to make any recommendations here as I’m not quite sure about what the ‘best’ is. It all depends on how much money you are willing to spend. It will have a significant impact on general performance of your website.
- Use a CDN, if you don’t know what a CDN is, please google it.
- You have too many plugins, yes we all do (most likely). Each plugin will add it’s own JS, CSS and who knows what else. Go through your list of plugins and start deactivating AND deleting all plugins you are not using or perhaps it’s really not that important to have after all!. Really, delete these plugins, most issues are because of plugins, I still have too many, slowly working on eliminating them to bare minimum.
- Use a caching plugin, yes you need one! All WordPress sites need one in my opinion. I personally use WP-Rocket and it’s performed extremely well.
- Configuration for WP-Rocket (checkbox on the following)
- Enable Caching for mobile devices
- Minify CSS Files
- Optimize CSS Delivery
- Minify Javascript Files
- Load Javascript deferred
- Delay Javascript execution
- Lazyload -> enable for images
- Enable link preloading
- I added items to Prefetch DNS Requests – I’m not writing mine down as yours will probably be different
- I preload a font – I’m not writing mine down as yours will probably be different
- I added items to Cache Query String -I’m not writing mine down as yours will probably be different
- Control heartbeat – set all options to “reduce activity”
- At time of writing I’m NOT using webp caching YET as woodmart is not completely ready for webp implementation through imagify, once image dimensions are added everywhere I will consider this again and update this item. (Imagify I will touch on later, but it ads a picture element for webp, and that is a bit out of the scope for woodmart)
- Install an image optimizer, I started using imagify. It works, not the fastest but I choose it because I also use WP-Rocket and both plugins are owned by the same company so I’m hoping they work well together.
- Configuration for Imagify (checkbox on the following)
- Auto-optimize images on upload
- Backup original images
- Keep all EXIF data from your images (might not be important for you)
- Create web version of images
- I am NOT using “Display images in webp YET, imagify rewrites a picture tag when you have a CDN and it doesn’t work yet with woodmart, this is a limitation of Imagify in my opinion as it cannot set the rewrite rules properly when using a CDN.
- Resize larger images (I set it to 1600, but should probably be lower). If it doesn’t allow you to change this value to a lower setting reach out to support and they send you a plugin to suppress some of the weird large image sizes in WordPress.
- If you run a store with WooCommerce I recommend installing “Disable Cart Fragments” – google it
I’m hopeful for the next version of woodmart to include more image dimension information and more tweaks to optimize the site. Ideally an additional option for modifying the CSS for mobile would be fantastic but I understand that is difficult.
Thank you XTEMOS, Woodmart is a fantastic theme, hope this will help some people use your theme (or others) better.
Again, my experiences – it may not be complete or perfect – use at your own risk, make a backup of your site before you do any of this! If you have better suggestions, please let us all know and write about it.
All the best
In reply to: Product tabs not configurable ?
Hello,
Product tabs are the Woocommerce functionality. Our theme provides two more tabs: one global – for all the products and one individual.
Description – is the main description on the product page. Can be created with a builder.
Reviews are enabled/disabled in the Woocommerce > Settings > Product.
Additional tab (with the attributes) enter each attribute in the product page and enable/disable showing on the product page to show this tab or enable to hide.
Additional tab (Shipping information) You can edit it in the Theme Settings > Product page > Tabs: https://xtemos.com/docs/woodmart/html-blocks-2/#shipment_delivery Clean all the fields.
If you need more tabs, you need to find a plugin.
Best Regards
In reply to: important
Hello,
2) If you enable the option to display the “show attribute labels on the products” then the attribute will be displayed on the image.
Screenshot for Clarification: https://ibb.co/k9sYR83
3) Sorry but it is not possible to show a detailed description of the product on the shop page. You can only display a short description or additional information on the products.
You can choose the product styles according to your needs from Theme Settings >> Shop >> Product Styles.
Screenshot for Clarification: https://prnt.sc/zphn4i
After enabling the product style please provide the URL of the shop page to check whether it is possible to show summary content without hover or not using Custom CSS.
Regards.
Xtemos Studios.www.cidev.roParticipantJanuary 26, 2021 at 11:12 am #261459Hello team,
Our client wants to know if the following can be achieved using Woodmart:
Taking this product page as an example:
1. On the ,,Specifications” tab (formerly “additional information”) – can the information be arranged on two columns (on desktop, laptop and tablet at least)? Can a team member of yours make this customization? Our client is willing to pay for this. If this is possible, how can we get in touch?
2. Can we add TWO extra tabs on the product page, in the form of HTML Blocks (just like with the Shipping & Delivery tab) – both tabs would show the exact same information for all products so it would be nice to be able to edit them from one place only.
3. On the variable products page, (take the above as an example) – is it possible to show the actual price AND sale price right below the title? (All the variations will probably have the same price and sale price) I know both prices appear once you actually select a variation but can they be shown right below the title?
4. How can the “HOT”, “NEW” and “SALE” labels be made smaller? Are you able to provide some sort of CSS for this, please?
5. Our client also wants that, when you access the product page, that the colour variation indicating the actual color should be pressed by default, and also the client wants the names of the actual colors we are looking at to be visible just beneath the two round thumbnails (see product above) – in our case “Mahogany” & “Natur”, is that possible? And also what the client wants is that the actual attribute chosen to be highlighted in a more obvious way (for example, inside a square, or it should have a tick of some sort).
Please let us know if any member of your team is willing to make these customizations and please let us know what the cost would be in each case.
Kind Regards,
In reply to: Shop Sidebar Colour Swatches – Chopped Off…
Hi Artem,
We have four issues which we have been asking for help with for days and the same replies keep coming, which are not solving our issue:
1) https://xtemos.com/forums/topic/3x-woodmart-qs-additional-info-size-guide-category-icons/
Here we’re asking how to change the “Additional Information” label on the second tab on a product page – the one which shows the product attributes. We’ve been told to try the Loco Translate, this didn’t work and then we’ve been told to change a setting under Theme Settings, which isn’t there.2) https://xtemos.com/forums/topic/change-the-hot-label-on-products/
The last reply – I refuse to believe there is no way of switching the “Hot” label to always appear above the “sale” attribute – I believe support just cannot be bothered to help on this one.3) https://xtemos.com/forums/topic/google-maps-error-4/
Was told this error would be discussed with your dev team nearly three weeks back, but no reply since.4) https://xtemos.com/forums/topic/shop-sort-by-not-working-pricing-filter-help/
The ‘Filter by Price’ slider – surely this can be used with another numerical attribute, as I’m using a Price Measurement plugin, so the “price” in the backend is not the actual “price” shown on the front end.Any actual help to these queries would be appreciated… every time I’ve asked support it has taken 4-5 questions to get an answer. I just need answers – not a drawn our conversions with Elise.
Kind regards,
StewartIn reply to: Filter by brand with logo
1) Ok, thanks!
2) I have found an option in the attributes tab (Visible on the products page) Unchecking the box no longer shows the tab: additional information
Attachments:
You must be logged in to view attached files.In reply to: Hoover block (Vat and Plus Shipping)
Hello,
I can hide this information with custom CSS is it workable?
.product p.wc-gzd-additional-info, .product-quick-view p.wc-gzd-additional-info { display:none; }
Or I can reduce the font size In any case the block on hover would overlap the products in the row below, you can consider using another hover design in the Theme Settings > Shop page > Product Style.
Best Regards
Hello,
Thank you very much for choosing our theme and for contacting us.
1. Addition information (Shopping and Delivery) tab is edited in the Theme Settings > Product page > Tabs. If you mean Additional tab with the product attributes:
You can translate/rewrite all theme and plugin texts via PO file in WordPress. Here is a video tutorial that should help you translate your website texts with a Loco Translate plugin https://www.youtube.com/watch?v=D3NsDdMzsls&list=PLMw6W4rAaOgKKv0oexGHzpWBg1imvrval&index=3
Please check the video tutorial to see how to save the translation file correctly. You can remove the plugin and translations would remain. Also, translations would remain after each theme update.
The same relates to # 2
# 3 You need to open your SVG icons file with some editor like Sublime Text or default system text editor and add width=”31″ height=”40″ attributes to your
<svg>
tag like it is shown: http://prntscr.com/m4n0qw
Then you will need to re-upload your icons in WordPress Dashboard.# 4 The product description content can be rebuilt with a page builder (WP bakery page builder or Elementor. You can add an extra content block to the page, here is the demo: https://woodmart.xtemos.com/shop/furniture/eames-lounge-chair/ and https://woodmart.xtemos.com/shop/furniture/ornare-auctor/ these blocks were built in Dashboard > HTML and the HTML block ID shortcode is added to the Extra content block: https://xtemos.com/docs/woodmart/product-page-options/#local_settings
# 5 You can disable the reviews in the Woocommerce > Settings > Products.
Best Regards
Topic: Some minor issues
in forum WoodMart support forumHi support-team,
I am almost done setting up my shop with the Woodmart-theme – it is so far really a great product, however, I am having some minor issues:
1) Translation issue: I have already installed Loco and translated the theme. However, I can not find where I can change “register” on the my-account-page, when the user is logged-out (Register-Translation.png)
2) Product-Grid with two-line title: I have enabled that the Products should show two-lines of the product title. Yet, then the items are not in one line. Is there a way to put all products into one line, regardless if they have 1-line title or 2-line title? Is there basically an option where I can set both to 2-lines (Product-Grid.png)
3) Mobile-View-Issue: First of all, I know that your theme looks fine on mobile. However in order to make my shop EU-conform I had to install the Germanized-Plugin which adds additionally the shipping-cost and tax lines into the products. Yet, then this information totally overlays the product and it doesn’t look good at all. Did you maybe come across already that issue and do you maybe have a fix more me for that?
Kindly regards!
Attachments:
You must be logged in to view attached files.In reply to: Information shipping on the product page
Hello,
Thank you very much for choosing our theme and for contacting us.
By default, Woocommerce does not provide the option to add the shipping information into the product page.
If this information is common for all the products, you can insert it in the After /Before Add to cart button in the Theme Settings > Product page. https://xtemos.com/docs/woodmart/html-blocks-2/#before_after
If it is individual for each product you can add such information by means of an additional tab or extra content block: https://xtemos.com/docs/woodmart/product-page-options/#local_settings
Best Regards
In reply to: Additional tab content and WCFM and HTML Blocks
Ok…
1. I have WCFM plugin and “About” tab on the vendor page. Screen: https://prnt.sc/uy7uk4
2. I made a new additional tab on the products page. I used Woodmart to make it (Product page->Tabs). Screen: https://prnt.sc/uy7vji
3. I put there a WCFM-shortcode to show information from “About” tab on the vendor’s page. Screen: https://prnt.sc/uy7x6v
And it works well. Screen: https://prnt.sc/uy89xfAfter that I trying to use Woodmart HTML blocks inside WCFM “About” tab.
1. I made new HTML block. Screen: https://prnt.sc/uy80mj
2. I put HTML block shortcode inside WCFM “About” tab field. Screen: https://prnt.sc/uy829q
And it works well on the WCFM “About” tab. Screen: https://prnt.sc/uy83ac
BUT… it doesn’t work on the additional tab on the products page. Screen: https://prnt.sc/uy841jTopic: Re-order custom tab on product page
in forum WoodMart support forumHello there,
I used this code to re-order the tabs, but now we’re starting to use the custom tab on products pages and I need to set the priority. What is it the element id to do that?
Thanks.
add_filter( 'woocommerce_product_tabs', 'woo_reorder_tabs', 98 ); function woo_reorder_tabs( $tabs ) { $tabs['reviews']['priority'] = 5; // Reviews first $tabs['additional_information']['priority'] = 15; // Additional information third return $tabs; }
In reply to: edit product tab
Hello,
Description – remove everything from the main description.
Reviews are disabled in the Woocommerce > Settings > Product.
Additional tab (with the attributes) enter each attribute in the product page and disable showing on the product page.
Vendor information – disable the brands https://xtemos.com/docs/basel/faq-guides-2/how-to-setup-brands
More products – it seems it is the additional tab in the product page, clean all the content.
Best Regards
In reply to: product creation
Hello,
1) The swatches are form of product variations that are displayed on the product page in a different way of the default dropdowns. That you need to enable for each attribute item from Product >> Attributes.
Screenshot for Clarification: https://ibb.co/q7TzYCz
2) To set up countdown timer on the product you can read our detailed documentation in the following link:
https://xtemos.com/docs/woodmart/faq-guides/display-countdown-timer-product/3) The tabs are controlled by woocommerce and the data is inserted according to the product information that you add. The only option in theme settings is to edit the Shipping & Delivery tab that is added as an additional tab. That you can access from Theme Settings >> Product Page >> Tabs.
Screenshot for Clarification: https://ibb.co/k4xLqp2
4) The review tab is also controlled by WooCommerce. You can enable/disable and made necessary settings that are provided under WooCommerce >> Settings >> Products.
Screenshot for Clarification: https://ibb.co/Np8mr1w
Best Regards.
Hello,
I’ve used woocommerce_after_shop_loop_item_title to add additional info after product price on category pages and this works OK. I’ve added information in the following way:
- With ACF was created select box custom field. Select box option values are HTML Block shortcodes
- WPML is set to copy it to all languages
- For all select box values I’ve created corresponding HTML Block to keep things manageable for end users + WPML translations
- WPML string translation is switching HTML Block shortcode according to languages
- woocommerce_after_shop_loop_item_title hook function is reading custom field and do_shortcode is rendering it
The problem with Ajax Products tabs:
- The first tab is working OK (coorected CSS is not applied yet) – https://drive.google.com/file/d/1ok7vHlLjJeZmvXrTeUekcjbtQdX_gYN2/view?usp=sharing
- The second tab the HTML Block shortcode is rendered but shortcodes inside HTML Block were not: https://drive.google.com/file/d/1RHicBzRiqvbm-KgAA0hRde35q8cS3QT1/view?usp=sharing
How it is possible to fix this?
Because this site is production site this custom field HTML is hidden on front page through CSS (<div class=”transport-front”>).
In reply to: Guides
Hello
it doesn’t work either. my products have to have weight, I have to add weight to the products. I’m going to contact a programmer to get this additional information bar where the weight appears …
I have another problem to solve I can’t update the
WPBakery Page Builder gives the following error:An error occurred while updating WPBakery Page Builder: To receive automatic updates license activation is required. Please visit Settings to activate your WPBakery Page Builder. Got WPBakery Page Builder in theme?
WPBakery Page Builder is not included in woodmart?
Do I have to buy a license to update it?greetings
Uni-CrafterzParticipantApril 13, 2020 at 9:43 am #186477Dear xtemos team,
I’m facing the issue in single product page,
When I’m click in additional information Tab it Redirects to -> you may like also products / similar products.
500 internal server error :-
When I’m login into my website as administrator, the 500 internal server error text appear’sThis issue is only in Website dashboard.
Rest all the pages are working fine.I’ve tried this also but not solved the problem -> https://www.wpbeginner.com/wp-tutorials/how-to-fix-the-internal-server-error-in-wordpress/
I’ve attached a 2 short videos for better understanding.
Videos link : https://we.tl/t-PkeQeHpU86
Thanks
Uni-CrafterzIn reply to: Additional information 2 columns
Hello,
Additional information in the product page can be added globally – the same for all the products and individually in each product.
The global option is provided in the Theme Settings > Product page > Tabs > Additional information title and Additional information content. You can create HTML (WP Bakery page builder template), insert a row and divide it into as many columns as you need, and insert HTML ID into the content area.
Enter any product page and you will find the option of an Additional tab, you can also insert HTML shortcode ID inside.
Best Regards
Topic: removing tabs from product pages
in forum WoodMart support forumWhat is the difference between main theme and child theme?
Main issue – I am trying to remove the additional info tab from the product pages. I put in this css code on each product page as recommended from earlier posts. However, problem is that it also removes the long description, which I need.
.product-tabs-wrapper {
display: none;
}Will this longer code solve above issue?
If so, can you help me on where it goes? Not familiar or cant find functions.php
add_filter( ‘woocommerce_product_tabs’, ‘woo_rename_tabs’, 98 );
function woo_rename_tabs( $tabs ) {
$tabs[‘description’][‘title’] = __( ‘Product Description’ ); // Rename the description tab
return $tabs;
}
from link https://xtemos.com/forums/search/ADDITIONAL+INFORMATION+products+page/Topic: Single Product Page
in forum WoodMart support forum1. How can I change “Related Products” text to “You May Also Like”?
https://prnt.sc/qrht262. I’m not planning to use long description or additional information. How can I remove the line shown in image.
https://prnt.sc/qrhuc03. Is it possible to show related products in a carousal?
https://prnt.sc/qrhuzr4. How can I move short description below add to cart button and add a 1px border around it?
https://prnt.sc/qrhvfsHello,
1) You can change the “product-category” word from URL, you need to go to Settings >> Permalinks >> Product category base option, and replace the word.
Screenshot for clarification: https://jmp.sh/3UGiop1
2) When you set showing an attribute on the product page, WooCommerce generates an additional information tab and shows the attribute.
In general the additional information tab only shown when you add attributes to the products. If you want to show the Additional information tab you have to add all those attributes from the product as in the screenshot: https://jmp.sh/2pFIr97
Result: https://jmp.sh/AMlSqki
To remove the additional information tab from your product page you can use the below custom code in your child theme funtion.php:
add_filter( 'woocommerce_product_tabs', 'woo_remove_product_tabs', 98 ); function woo_remove_product_tabs( $tabs ) { unset( $tabs['additional_information'] ); // Remove the additional information tab return $tabs; }
OR
You can also remove it by disabling attributes added to products.
This tab only display the information about the product attributes. You can not add other information inside this tab.
Best Regards.
wormholetattooParticipantJanuary 18, 2020 at 8:42 am #168653I want to know how to modify the url and additional content in the product page。
1、After I built the website, I found out that my website URL is like this:
https://wormholetattoosupply.com/product-category/tattoo-machines/tattoo-pens/,
I want to remove product-category,Make my url like this:
https://wormholetattoosupply.com/tattoo-machines/tattoo-pens/,
Please tell me what should i do. thank you.2、I want to know how to modify the content here:https://wormholetattoosupply.com/wp-content/uploads/2020/01/Snipaste_2020-01-18_16-36-35.jpg ,The product I am exemplifying is here(https://wormholetattoosupply.com/products/aluminum-alloy-tattoo-pen-6-colors/).
such as remove ADDITIONGAL INFORMATION, or modify it, or add other part to here?Where should I go to modify the content in the red box?Looking forward for your reply, thank you.
Attachments:
You must be logged in to view attached files.In reply to: Produkteigenschaften
Hello,
Your question is not clear enough. If you mean product variations, please follow the instructions: A variable product is a product that has more than one option in attributes, for example, color, size, material. Instruction on how to create an attribute is here https://docs.woocommerce.com/document/managing-product-taxonomies/ as soon as the necessary attributes are available, a variable product can be created, instructions on how to create a variable product is here https://docs.woocommerce.com/document/variable-product/
More information is here: https://xtemos.com/docs/woodmart/variable-products-swatches/
If you mean the tabs, the first tab is the main description, and other additional inofrmation can be added as per instruction here: https://xtemos.com/docs/woodmart/product-page-options/
Best Regards
In reply to: Single Product page tabs and size guide
Hello,
An additional tab can be added globally: one for all the products (in the Theme Settings > Product page > Tabs > Additional tab and another tab can be added individually for each product on the product page. https://xtemos.com/docs/woodmart/options-for-pages/
You can add two tabs max. If you need more tab you can check the below documentation for this purpose: https://docs.woocommerce.com/document/editing-product-data-tabs/
The “About Brand” tab only display when you add brand attributes to some product. You can check the below documentation:
https://xtemos.com/docs/woodmart/faq-guides/how-to-setup-brands/About the size guide if you want to make the same upper portion then simply edit your size guide with Wp-Bakery Page Builder from Dashboard >> Size Guides option and design your sidebar by creating two columns, in the very first column you have to use your image, and in the second column you have to use information box theme element with the help of Wp-Bakery Page builder.
Also you can check the below documentation for more guidance:
https://xtemos.com/docs/woodmart/faq-guides/create-size-guide-table/Best Regards.
newsprinceParticipantDecember 11, 2019 at 9:46 pm #162826To XTEMOS Team and Artem Temos
Based on the Feature Requests from @pacman1917
I rewrote the Shop > Products Styles > Products grid with different sizes function
creating the feature request pacman1917 wrotePlease consider adding shop layout with mixed number of product per row, e.g. 3-4-3 and working with all product layouts. Like here – https://newnorth.fuelthemes.net/north-jewellery/shop/?shop_product_listing=style1
This allow to do the alternating repeated pattern design in grid view
3-2-3 for 3 column selected
4-3-4 for 4 column selected
5-4-5 for 5 column selected
6-5-6 for 6 column selected
I attach a screen recording bellow to see (on our demo environment)
https://recordit.co/pMz87dsHfP
Please review the code below and maybe implement it in a future release.
Thank you.
For anyone who wants to try it. Replace the code inside /wp-content/themes/woodmart/inc/integrations/woocommerce/functions.php
with the one below<?php if ( ! defined( 'WOODMART_THEME_DIR' ) ) { exit( 'No direct script access allowed' ); } /** * ------------------------------------------------------------------------------------------------ * Main loop * ------------------------------------------------------------------------------------------------ */ if( ! function_exists( 'woodmart_woocommerce_main_loop' ) ) { add_action( 'woodmart_woocommerce_main_loop', 'woodmart_woocommerce_main_loop' ); function woodmart_woocommerce_main_loop( $fragments = false ) { global $paged, $wp_query; $max_page = $wp_query->max_num_pages; if ( $fragments ) ob_start(); if ( $fragments && isset( $_GET['loop'] ) ) woodmart_set_loop_prop( 'woocommerce_loop', (int) sanitize_text_field( $_GET['loop'] ) ); if ( woocommerce_product_loop() ) : ?> <?php if( ! $fragments ) woocommerce_product_loop_start(); ?> <?php if ( wc_get_loop_prop( 'total' ) || $fragments ): ?> <?php while ( have_posts() ) : the_post(); ?> <?php /** * Hook: woocommerce_shop_loop. * * @hooked WC_Structured_Data::generate_product_data() - 10 */ do_action( 'woocommerce_shop_loop' );?> <?php wc_get_template_part( 'content', 'product' ); ?> <?php endwhile; // end of the loop. ?> <?php endif; ?> <?php if( ! $fragments ) woocommerce_product_loop_end(); ?> <?php /** * woocommerce_after_shop_loop hook * * @hooked woocommerce_pagination - 10 */ if( ! $fragments ) do_action( 'woocommerce_after_shop_loop' ); ?> <?php else: ?> <?php /** * Hook: woocommerce_no_products_found. * * @hooked wc_no_products_found - 10 */ do_action( 'woocommerce_no_products_found' ); ?> <?php endif; if ( $fragments ) $output = ob_get_clean(); if( $fragments ) { $output = array( 'items' => $output, 'status' => ( $max_page > $paged ) ? 'have-posts' : 'no-more-posts', 'nextPage' => str_replace( '&', '&', next_posts( $max_page, false ) ) ); echo json_encode( $output ); } } } /** * ------------------------------------------------------------------------------------------------ * Change number of products displayed per page * ------------------------------------------------------------------------------------------------ */ if( ! function_exists( 'woodmart_shop_products_per_page' ) ) { function woodmart_shop_products_per_page() { $per_page = 12; $number = apply_filters('woodmart_shop_per_page', woodmart_get_products_per_page() ); if( is_numeric( $number ) ) { $per_page = $number; } return $per_page; } add_filter( 'loop_shop_per_page', 'woodmart_shop_products_per_page', 20 ); } /** * ------------------------------------------------------------------------------------------------ * Set full width layouts for woocommerce pages on set up * ------------------------------------------------------------------------------------------------ */ if( ! function_exists( 'woodmart_woocommerce_install_actions' ) ) { function woodmart_woocommerce_install_actions() { if ( isset( $_GET['page'] ) && ! empty( $_GET['page'] ) && $_GET['page'] == 'wc-setup' && isset( $_GET['step'] ) && ! empty( $_GET['step'] ) && $_GET['step'] == 'next_steps') { $pages = apply_filters( 'woocommerce_create_pages', array( 'cart' => array( 'name' => _x( 'cart', 'Page slug', 'woodmart' ), 'title' => _x( 'Cart', 'Page title', 'woodmart' ), 'content' => '[' . apply_filters( 'woocommerce_cart_shortcode_tag', 'woocommerce_cart' ) . ']' ), 'checkout' => array( 'name' => _x( 'checkout', 'Page slug', 'woodmart' ), 'title' => _x( 'Checkout', 'Page title', 'woodmart' ), 'content' => '[' . apply_filters( 'woocommerce_checkout_shortcode_tag', 'woocommerce_checkout' ) . ']' ), ) ); foreach ( $pages as $key => $page ) { $option = 'woocommerce_' . $key . '_page_id'; $page_id = get_option( $option ); update_post_meta( $page_id, '_woodmart_main_layout', 'full-width' ); } woodmart_woocommerce_image_dimensions(); } } add_action( 'admin_init', 'woodmart_woocommerce_install_actions', 1000); add_action( 'admin_print_styles', 'woodmart_woocommerce_install_actions', 1000); } /** * Define image sizes */ if( ! function_exists( 'woodmart_woocommerce_image_dimensions' ) ) { function woodmart_woocommerce_image_dimensions() { global $pagenow; update_option( 'woocommerce_single_image_width', '1200' ); // Single product image update_option( 'woocommerce_thumbnail_image_width', '600' ); // Gallery and catalog image } } /** * ------------------------------------------------------------------------------------------------ * Get base shop page link * ------------------------------------------------------------------------------------------------ */ if( ! function_exists( 'woodmart_shop_page_link' ) ) { function woodmart_shop_page_link( $keep_query = false, $taxonomy = '' ) { // Base Link decided by current page if ( woodmart_is_shop_on_front() ) { $link = home_url(); } elseif ( is_post_type_archive( 'product' ) || is_page( wc_get_page_id('shop') ) ) { $link = get_post_type_archive_link( 'product' ); } elseif( is_product_category() ) { $link = get_term_link( get_query_var('product_cat'), 'product_cat' ); } elseif( is_product_tag() ) { $link = get_term_link( get_query_var('product_tag'), 'product_tag' ); } else { $link = get_term_link( get_query_var('term'), get_query_var('taxonomy') ); } if( $keep_query ) { // Min/Max if ( isset( $_GET['min_price'] ) ) { $link = add_query_arg( 'min_price', wc_clean( $_GET['min_price'] ), $link ); } if ( isset( $_GET['max_price'] ) ) { $link = add_query_arg( 'max_price', wc_clean( $_GET['max_price'] ), $link ); } // Orderby if ( isset( $_GET['orderby'] ) ) { $link = add_query_arg( 'orderby', wc_clean( $_GET['orderby'] ), $link ); } /** * Search Arg. * To support quote characters, first they are decoded from " entities, then URL encoded. */ if ( get_search_query() ) { $link = add_query_arg( 's', rawurlencode( wp_specialchars_decode( get_search_query() ) ), $link ); } // Post Type Arg if ( isset( $_GET['post_type'] ) ) { $link = add_query_arg( 'post_type', wc_clean( $_GET['post_type'] ), $link ); } // Min Rating Arg if ( isset( $_GET['min_rating'] ) ) { $link = add_query_arg( 'min_rating', wc_clean( $_GET['min_rating'] ), $link ); } // All current filters if ( $_chosen_attributes = WC_Query::get_layered_nav_chosen_attributes() ) { foreach ( $_chosen_attributes as $name => $data ) { if ( $name === $taxonomy ) { continue; } $filter_name = sanitize_title( str_replace( 'pa_', '', $name ) ); if ( ! empty( $data['terms'] ) ) { $link = add_query_arg( 'filter_' . $filter_name, implode( ',', $data['terms'] ), $link ); } if ( 'or' == $data['query_type'] ) { $link = add_query_arg( 'query_type_' . $filter_name, 'or', $link ); } } } } if ( is_string( $link ) ) { return $link; } else { return ''; } } } /** * ------------------------------------------------------------------------------------------------ * Get product design option * ------------------------------------------------------------------------------------------------ */ if ( ! function_exists( 'woodmart_product_design' ) ) { function woodmart_product_design() { $design = woodmart_get_opt( 'product_design' ); if( is_singular( 'product' ) ) { $custom = get_post_meta( get_the_ID(), '_woodmart_product_design', true ); if( ! empty( $custom ) && $custom != 'inherit' ) $design = $custom; } return $design; } } /** * ------------------------------------------------------------------------------------------------ * Is product sticky * ------------------------------------------------------------------------------------------------ */ if ( ! function_exists( 'woodmart_product_sticky' ) ) { function woodmart_product_sticky() { $sticky = woodmart_get_opt( 'product_sticky' ) && in_array( woodmart_get_opt( 'single_product_style' ), array( 1, 2, 3 ) ) ? true : false; if( is_singular( 'product' ) ) { $custom = get_post_meta( get_the_ID(), '_woodmart_product_sticky', true ); if( ! empty( $custom ) && $custom != 'inherit' ) $sticky = $custom; } return $sticky; } } /** * ------------------------------------------------------------------------------------------------ * Register new image size two times larger than standard woocommerce one * ------------------------------------------------------------------------------------------------ */ if( ! function_exists( 'woodmart_add_image_size' ) ) { add_action( 'after_setup_theme', 'woodmart_add_image_size' ); function woodmart_add_image_size() { if( ! function_exists( 'wc_get_image_size' ) ) return; $shop_catalog = wc_get_image_size( 'woocommerce_thumbnail' ); $width = (int) ( $shop_catalog['width'] * 2 ); $height = ( !empty( $shop_catalog['height'] ) ) ? (int) ( $shop_catalog['height'] * 2 ) : ''; add_image_size( 'woodmart_shop_catalog_x2', $width, $height, $shop_catalog['crop'] ); } } /** * ------------------------------------------------------------------------------------------------ * Custom thumbnail function for slider * ------------------------------------------------------------------------------------------------ */ if ( ! function_exists( 'woodmart_template_loop_product_thumbnail' ) ) { function woodmart_template_loop_product_thumbnail() { echo woodmart_get_product_thumbnail(); } } if ( ! function_exists( 'woodmart_get_product_thumbnail' ) ) { function woodmart_get_product_thumbnail( $size = 'woocommerce_thumbnail', $attach_id = false ) { global $post; $custom_size = $size; $defined_sizes = array('woocommerce_thumbnail', 'woodmart_shop_catalog_x2'); if( woodmart_loop_prop( 'double_size' ) ) { $size = 'woodmart_shop_catalog_x2'; } if ( has_post_thumbnail() ) { if( ! $attach_id ) $attach_id = get_post_thumbnail_id(); $props = wc_get_product_attachment_props( $attach_id, $post ); if( woodmart_loop_prop( 'img_size' ) ) { $custom_size = woodmart_loop_prop( 'img_size' ); } $custom_size = apply_filters( 'woodmart_custom_img_size', $custom_size ); if( ! in_array( $custom_size, $defined_sizes ) && function_exists( 'wpb_getImageBySize' ) ) { $img = wpb_getImageBySize( array( 'attach_id' => $attach_id, 'thumb_size' => $custom_size, 'class' => 'content-product-image' ) ); $img = $img['thumbnail']; } else { $img = wp_get_attachment_image( $attach_id, $size, array( 'title' => $props['title'], 'alt' => $props['alt'], ) ); } return $img; } elseif ( wc_placeholder_img_src() ) { return wc_placeholder_img( $size ); } } } remove_action( 'woocommerce_before_shop_loop_item_title', 'woocommerce_template_loop_product_thumbnail', 10 ); add_action( 'woocommerce_before_shop_loop_item_title', 'woodmart_template_loop_product_thumbnail', 10 ); if( ! function_exists( 'woodmart_grid_swatches_attribute' ) ) { function woodmart_grid_swatches_attribute() { $custom = get_post_meta(get_the_ID(), '_woodmart_swatches_attribute', true ); return empty( $custom ) ? woodmart_get_opt( 'grid_swatches_attribute' ) : $custom; } } /** * ------------------------------------------------------------------------------------------------ * Get product page classes (columns) for product images and product information blocks * ------------------------------------------------------------------------------------------------ */ if( ! function_exists( 'woodmart_product_images_class' ) ) { function woodmart_product_images_class() { $size = woodmart_product_images_size(); $layout = woodmart_get_opt( 'single_product_style' ); $class = 'col-lg-' . $size . ' col-12'; $class .= ( $layout == 4 || $layout == 5 ) ? ' col-md-12' : ' col-md-6'; return $class; } function woodmart_product_images_size() { $summary_size = ( woodmart_product_summary_size() == 12 ) ? 12 : 12 - woodmart_product_summary_size(); return apply_filters( 'woodmart_product_summary_size', $summary_size ); } } if( ! function_exists( 'woodmart_product_summary_class' ) ) { function woodmart_product_summary_class() { $size = woodmart_product_summary_size(); $layout = woodmart_get_opt( 'single_product_style' ); $class = 'col-lg-' . $size . ' col-12'; $class .= ( $layout == 4 || $layout == 5 ) ? ' col-md-12' : ' col-md-6'; if ( woodmart_get_opt( 'single_product_variations_price' ) ) { $class .= ' woodmart-price-outside'; } return $class; } function woodmart_product_summary_size() { $page_layout = woodmart_get_opt( 'single_product_style' ); $size = 6; switch ( $page_layout ) { case 1: $size = 8; break; case 2: $size = 6; break; case 3: $size = 4; break; case 4: $size = 12; break; case 5: $size = 12; break; } return apply_filters( 'woodmart_product_summary_size', $size ); } } if( ! function_exists( 'woodmart_single_product_class' ) ) { function woodmart_single_product_class() { $classes = array(); $classes[] = 'single-product-page'; $classes[] = 'single-product-content'; $design = woodmart_product_design(); $product_bg = woodmart_get_opt( 'product-background' ); $page_layout = woodmart_get_opt( 'single_product_style' ); $classes[] = 'product-design-' . $design; $classes[] = 'tabs-location-' . woodmart_get_opt( 'product_tabs_location' ); $classes[] = 'tabs-type-' . woodmart_get_opt( 'product_tabs_layout' ); $classes[] = 'meta-location-' . woodmart_get_opt( 'product_show_meta' ); $classes[] = 'reviews-location-' . woodmart_get_opt( 'reviews_location' ); if( $design == 'alt' ) { $classes[] = 'product-align-center'; } if( $page_layout == 4 || $page_layout == 5 ) { $classes[] = 'image-full-width'; } if( woodmart_get_opt( 'single_full_width' ) ) { $classes[] = 'product-full-width'; } if( woodmart_get_opt( 'product_summary_shadow' ) ) { $classes[] = 'product-summary-shadow'; } if( woodmart_product_sticky() ) { $classes[] = 'product-sticky-on'; } if( ! empty( $product_bg ) && ! empty( $product_bg['background-color'] ) ) { $classes[] = 'product-has-bg'; } else { $classes[] = 'product-no-bg'; } return $classes; } } /** * ------------------------------------------------------------------------------------------------ * Configure product image gallery JS * ------------------------------------------------------------------------------------------------ */ if( ! function_exists( 'woodmart_get_product_gallery_settings' ) ) { function woodmart_get_product_gallery_settings() { return apply_filters( 'woodmart_product_gallery_settings', array( 'images_slider' => woodmart_is_main_product_images_carousel(), 'thumbs_slider' => array( 'enabled' => woodmart_is_product_thumb_enabled(), 'position' => woodmart_get_opt('thums_position'), 'items' => array( 'desktop' => 4, 'tablet_landscape' => 3, 'tablet' => 4, 'mobile' => 3, 'vertical_items' => 3 ) ) ) ); } } /** * ------------------------------------------------------------------------------------------------ * Remove product content link * ------------------------------------------------------------------------------------------------ */ remove_action( 'woocommerce_before_shop_loop_item', 'woocommerce_template_loop_product_link_open', 10 ); remove_action( 'woocommerce_after_shop_loop_item', 'woocommerce_template_loop_product_link_close', 5 ); remove_action( 'woocommerce_before_subcategory', 'woocommerce_template_loop_category_link_open', 10 ); remove_action( 'woocommerce_after_subcategory', 'woocommerce_template_loop_category_link_close', 10 ); /** * ------------------------------------------------------------------------------------------------ * WooCommerce enqueues 3 stylesheets by default. You can disable them all with the following snippet * ------------------------------------------------------------------------------------------------ */ add_filter( 'woocommerce_enqueue_styles', '__return_empty_array' ); /** * ------------------------------------------------------------------------------------------------ * Disable photoswipe * ------------------------------------------------------------------------------------------------ */ remove_action( 'wp_footer', 'woocommerce_photoswipe' ); /** * ------------------------------------------------------------------------------------------------ * Remove ordering from toolbar * ------------------------------------------------------------------------------------------------ */ remove_action( 'woocommerce_before_shop_loop', 'woocommerce_result_count', 20 ); /** * ------------------------------------------------------------------------------------------------ * Unhook the WooCommerce wrappers * ------------------------------------------------------------------------------------------------ */ remove_action( 'woocommerce_before_main_content', 'woocommerce_output_content_wrapper', 10); remove_action( 'woocommerce_after_main_content', 'woocommerce_output_content_wrapper_end', 10); /** * ------------------------------------------------------------------------------------------------ * Disable default product zoom init * ------------------------------------------------------------------------------------------------ */ add_filter( 'woocommerce_single_product_zoom_enabled', '__return_false' ); /** * ------------------------------------------------------------------------------------------------ * Get CSS class for widget in shop area. Based on the number of widgets * ------------------------------------------------------------------------------------------------ */ if( ! function_exists( 'woodmart_get_widget_column_class' ) ) { function woodmart_get_widget_column_class( $sidebar_id = 'filters-area' ) { global $_wp_sidebars_widgets; if ( empty( $_wp_sidebars_widgets ) ) : $_wp_sidebars_widgets = get_option( 'sidebars_widgets', array() ); endif; $sidebars_widgets_count = $_wp_sidebars_widgets; if ( isset( $sidebars_widgets_count[ $sidebar_id ] ) || $sidebar_id == 'filters-area' ) { $count = ( isset( $sidebars_widgets_count[ $sidebar_id ] ) ) ? count( $sidebars_widgets_count[ $sidebar_id ] ) : 0; $widget_count = apply_filters( 'widgets_count_' . $sidebar_id, $count ); $widget_classes = 'widget-count-' . $widget_count; $column = 4; if ( $widget_count < 4 && $widget_count != 0 ) { $column = $widget_count; } $widget_classes .= woodmart_get_grid_el_class( 0, $column, false, 12, 6, 6 ); return apply_filters( 'widget_class_' . $sidebar_id, $widget_classes); } } } /** * ------------------------------------------------------------------------------------------------ * Play with woocommerce hooks * ------------------------------------------------------------------------------------------------ */ if( ! function_exists( 'woodmart_woocommerce_hooks' ) ) { function woodmart_woocommerce_hooks() { global $woodmart_prefix; $product_meta_position = woodmart_get_opt( 'product_show_meta' ); $product_show_meta = ( $product_meta_position != 'hide' ); $product_show_share = woodmart_get_opt( 'product_share' ); $product_show_desc = woodmart_get_opt( 'product_short_description' ); $tabs_location = woodmart_get_opt( 'product_tabs_location' ); $reviews_location = woodmart_get_opt( 'reviews_location' ); remove_action( 'woocommerce_after_single_product_summary', 'woocommerce_upsell_display', 15 ); remove_action( 'woocommerce_after_single_product_summary', 'woocommerce_output_related_products', 20 ); // Reviews location if( $reviews_location == 'separate' ) { add_filter( 'woocommerce_product_tabs', 'woodmart_disable_reviews_tab', 98 ); add_action( 'woocommerce_after_single_product_summary', 'comments_template', 50 ); } // Upsells position if( is_singular( 'product' ) ) { if( woodmart_get_opt( 'upsells_position' ) == 'sidebar' ) { add_action( 'woodmart_before_sidebar_area', 'woocommerce_upsell_display', 20 ); } else { add_action( 'woodmart_woocommerce_after_sidebar', 'woocommerce_upsell_display', 10 ); } } // Disable related products option if( woodmart_get_opt('related_products') && ! get_post_meta(get_the_ID(), '_woodmart_related_off', true ) ) { add_action( 'woodmart_woocommerce_after_sidebar', 'woocommerce_output_related_products', 20 ); } // Disable product tabs title option if( woodmart_get_opt('hide_tabs_titles') || get_post_meta(get_the_ID(), '_woodmart_hide_tabs_titles', true ) ) { add_filter( 'woocommerce_product_description_heading', '__return_false', 20 ); add_filter( 'woocommerce_product_additional_information_heading', '__return_false', 20 ); } if( woodmart_get_opt('shop_filters') ) { // Use our own order widget list? if( apply_filters( 'woodmart_use_custom_order_widget', true ) ) { if( ! is_active_widget( false, false, 'woodmart-woocommerce-sort-by', true ) ) { add_action( 'woodmart_before_filters_widgets', 'woodmart_sorting_widget', 10 ); } if ( woodmart_get_opt( 'shop_filters_type' ) == 'widgets' ) { remove_action( 'woocommerce_before_shop_loop', 'woocommerce_catalog_ordering', 30 ); } } // Use our custom price filter widget list? if( apply_filters( 'woodmart_use_custom_price_widget', true ) && ! is_active_widget( false, false, 'woodmart-price-filter', true ) ) { add_action( 'woodmart_before_filters_widgets', 'woodmart_price_widget', 20 ); } // Add 'filters button' add_action( 'woocommerce_before_shop_loop', 'woodmart_filter_buttons', 40 ); } add_action( 'woocommerce_cart_is_empty', 'woodmart_empty_cart_text', 20 ); /** * Remove default empty cart text */ remove_action( 'woocommerce_cart_is_empty', 'wc_empty_cart_message', 10 ); // Wrapp cart totals add_action( 'woocommerce_before_cart_totals', function() { echo '<div class="cart-totals-inner">'; }, 1); add_action( 'woocommerce_after_cart_totals', function() { echo '</div><!--.cart-totals-inner-->'; }, 200); // Brand tab for single product if( woodmart_get_opt( 'brand_tab' ) ) { add_filter( 'woocommerce_product_tabs', 'woodmart_product_brand_tab' ); } // Poduct brand if( woodmart_get_opt( 'product_brand_location' ) == 'about_title' && is_singular( 'product' ) ) { add_action( 'woocommerce_single_product_summary', 'woodmart_product_brand', 3); } elseif( is_singular( 'product' )) { add_action( 'woodmart_before_sidebar_area', 'woodmart_product_brand', 10 ); } // Product share if ( $product_meta_position != 'after_tabs' && $product_show_share ) { add_action( 'woocommerce_single_product_summary', 'woodmart_product_share_buttons', 60 ); } // Disable meta and description if turned off if ( $product_meta_position != 'add_to_cart' ) { remove_action( 'woocommerce_single_product_summary', 'woocommerce_template_single_meta', 40 ); } if ( ! $product_show_desc ) { remove_action( 'woocommerce_single_product_summary', 'woocommerce_template_single_excerpt', 20 ); } // Product tabs location if( $tabs_location == 'summary' ) { remove_action( 'woocommerce_after_single_product_summary', 'woocommerce_output_product_data_tabs', 10 ); add_action( 'woocommerce_single_product_summary', 'woocommerce_output_product_data_tabs', 39 ); } if ( $product_meta_position == 'after_tabs' ) { add_action( 'woodmart_after_product_tabs', function() { echo '<div class="woodmart-before-product-tabs"><div class="container">'; }, 10 ); remove_action( 'woocommerce_single_product_summary', 'woocommerce_template_single_meta', 40 ); if( $product_show_meta ) add_action( 'woodmart_after_product_tabs', 'woocommerce_template_single_meta', 20 ); if( $product_show_share ) add_action( 'woodmart_after_product_tabs', 'woodmart_product_share_buttons', 30 ); add_action( 'woodmart_after_product_tabs', function() { echo '</div></div>'; }, 200 ); } // Product video, 360 view, zoom $video_url = get_post_meta(get_the_ID(), '_woodmart_product_video', true ); $images_360_gallery = woodmart_get_360_gallery_attachment_ids(); $image_action = woodmart_get_opt( 'image_action' ); if( ! empty( $video_url ) || ! empty( $images_360_gallery ) || ! empty( $image_action ) ) { add_action( 'woodmart_on_product_image', 'woodmart_additional_galleries_open', 25 ); add_action( 'woodmart_on_product_image', 'woodmart_additional_galleries_close', 100 ); } if( ! empty( $video_url ) ) { add_action( 'woodmart_on_product_image', 'woodmart_product_video_button', 30 ); } if( ! empty( $images_360_gallery ) ) { add_action( 'woodmart_on_product_image', 'woodmart_product_360_view', 40 ); } if( $image_action != 'popup' && woodmart_get_opt( 'photoswipe_icon' ) ) { add_action( 'woodmart_on_product_image', 'woodmart_product_zoom_button', 50 ); } // Custom extra content $extra_block = get_post_meta(get_the_ID(), '_woodmart_extra_content', true ); if( ! empty( $extra_block ) && $extra_block != 0 ) { $extra_position = get_post_meta(get_the_ID(), '_woodmart_extra_position', true ); if( $extra_position == 'before' ) { add_action( 'woocommerce_before_single_product', 'woodmart_product_extra_content', 20 ); } else if( $extra_position == 'prefooter' ) { add_action( 'woodmart_woocommerce_after_sidebar', 'woodmart_product_extra_content', 30 ); } else { add_action( 'woodmart_after_product_content', 'woodmart_product_extra_content', 20 ); } } // Custom tabs add_filter( 'woocommerce_product_tabs', 'woodmart_custom_product_tabs' ); // Timer on the single product page add_action( 'woocommerce_single_product_summary', 'woodmart_single_product_countdown', 15 ); // Instagram by hashbat for product add_action( 'woodmart_woocommerce_after_sidebar', 'woodmart_product_instagram', 80 ); // Cart page move totals remove_action( 'woocommerce_cart_collaterals', 'woocommerce_cart_totals', 10 ); //Product attibutes after of short description if ( woodmart_get_opt( 'attr_after_short_desc' ) ) { add_action( 'woocommerce_single_product_summary', 'woodmart_display_product_attributes', 21 ); add_filter( 'woocommerce_product_tabs', 'woodmart_remove_additional_information_tab', 98 ); } //Single product stock progress bar if ( woodmart_get_opt( 'single_stock_progress_bar' ) ) { add_action( 'woocommerce_single_product_summary', 'woodmart_stock_progress_bar', 16 ); } } add_action( 'wp', 'woodmart_woocommerce_hooks', 1000 ); } if( ! function_exists( 'woodmart_single_product_countdown' ) ) { function woodmart_single_product_countdown( $tabs ) { $timer = woodmart_get_opt( 'product_countdown' ); if( $timer ) woodmart_product_sale_countdown(); } } if( ! function_exists( 'woodmart_display_product_attributes' ) ) { function woodmart_display_product_attributes() { global $product; if ( $product && ( $product->has_attributes() || apply_filters( 'wc_product_enable_dimensions_display', $product->has_weight() || $product->has_dimensions() ) ) ) { wc_display_product_attributes( $product ); } } } if( ! function_exists( 'woodmart_remove_additional_information_tab' ) ) { function woodmart_remove_additional_information_tab( $tabs ) { unset( $tabs['additional_information'] ); return $tabs; } } /** * ------------------------------------------------------------------------------------------------ * Additional tab * ------------------------------------------------------------------------------------------------ */ if( ! function_exists( 'woodmart_custom_product_tabs' ) ) { function woodmart_custom_product_tabs( $tabs ) { $additional_tab_title = woodmart_get_opt( 'additional_tab_title' ); $custom_tab_title = get_post_meta( get_the_ID(), '_woodmart_product_custom_tab_title', true ); if ( $additional_tab_title ) { $tabs['woodmart_additional_tab'] = array( 'title' => $additional_tab_title, 'priority' => 50, 'callback' => 'woodmart_additional_product_tab_content' ); } if ( $custom_tab_title ) { $tabs['woodmart_custom_tab'] = array( 'title' => $custom_tab_title, 'priority' => 60, 'callback' => 'woodmart_custom_product_tab_content' ); } return $tabs; } } if( ! function_exists( 'woodmart_additional_product_tab_content' ) ) { function woodmart_additional_product_tab_content() { // The new tab content $tab_content = woodmart_get_opt( 'additional_tab_text' ); echo do_shortcode( $tab_content ); } } if( ! function_exists( 'woodmart_custom_product_tab_content' ) ) { function woodmart_custom_product_tab_content() { // The new tab content $tab_content = get_post_meta( get_the_ID(), '_woodmart_product_custom_tab_content', true ); echo do_shortcode( $tab_content ); } } if( ! function_exists( 'woodmart_disable_reviews_tab' ) ) { function woodmart_disable_reviews_tab( $tabs ) { unset( $tabs['reviews'] ); // Removes the reviews tab return $tabs; } } /** * ------------------------------------------------------------------------------------------------ * Filters buttons * ------------------------------------------------------------------------------------------------ */ if( ! function_exists( 'woodmart_filter_widgts_classes' ) ) { function woodmart_filter_widgts_classes( $count ) { if( apply_filters( 'woodmart_use_custom_order_widget', true ) && ! is_active_widget( false, false, 'woodmart-woocommerce-sort-by', true ) ) { $count++; } if( apply_filters( 'woodmart_use_custom_price_widget', true ) && ! is_active_widget( false, false, 'woodmart-price-filter', true ) ) { $count++; } return $count; } add_filter('widgets_count_filters-area', 'woodmart_filter_widgts_classes'); } /** * ------------------------------------------------------------------------------------------------ * Force WOODMART Swatche layered nav and price widget to work * ------------------------------------------------------------------------------------------------ */ add_filter( 'woocommerce_is_layered_nav_active', 'woodmart_is_layered_nav_active' ); if( ! function_exists( 'woodmart_is_layered_nav_active' ) ) { function woodmart_is_layered_nav_active() { return is_active_widget( false, false, 'woodmart-woocommerce-layered-nav', true ); } } add_filter( 'woocommerce_is_price_filter_active', 'woodmart_is_layered_price_active' ); if( ! function_exists( 'woodmart_is_layered_price_active' ) ) { function woodmart_is_layered_price_active() { $result = is_active_widget( false, false, 'woodmart-price-filter', true ); if( ! $result ) { $result = apply_filters( 'woodmart_use_custom_price_widget', true ); } return $result; } } /** * ------------------------------------------------------------------------------------------------ * Change the position of woocommerce breadcrumbs * ------------------------------------------------------------------------------------------------ */ remove_action( 'woocommerce_before_main_content', 'woocommerce_breadcrumb', 20 ); /** * ------------------------------------------------------------------------------------------------ * Add photoswipe template to body * ------------------------------------------------------------------------------------------------ */ add_action( 'woodmart_after_footer', 'woodmart_photoswipe_template', 1000 ); if( ! function_exists( 'woodmart_photoswipe_template' ) ) { function woodmart_photoswipe_template() { get_template_part('woocommerce/single-product/photo-swipe-template'); } } // **********************************************************************// // ! Start woocommerce customer session // **********************************************************************// if( ! function_exists( 'woodmart_set_customer_session' ) ) { add_action( 'woodmart_before_shop_page', 'woodmart_set_customer_session', 10 ); function woodmart_set_customer_session() { if( ! function_exists( 'WC' ) ) return; if ( WC()->version > '2.1' && ( ! is_admin() || defined( 'DOING_AJAX' ) ) && ! defined( 'DOING_CRON' ) ) : WC()->session->set_customer_session_cookie( true ); endif; } } // **********************************************************************// // ! Items per page select on the shop page // **********************************************************************// if( ! function_exists( 'woodmart_products_per_page_action' ) ) { add_action( 'woodmart_before_shop_page', 'woodmart_products_per_page_action', 100 ); function woodmart_products_per_page_action() { if ( isset( $_REQUEST['per_page'] ) ) : if( ! class_exists('WC_Session_Handler')) return; $s = WC()->session; // WC()->session if ( is_null( $s ) ) return; $s->set( 'shop_per_page', intval( $_REQUEST['per_page'] ) ); endif; } } // **********************************************************************// // ! Get Items per page number on the shop page // **********************************************************************// if( ! function_exists( 'woodmart_get_products_per_page' ) ) { function woodmart_get_products_per_page() { if( ! class_exists('WC_Session_Handler') ) return; $s = WC()->session; // WC()->session if ( is_null( $s ) ) return intval( woodmart_get_opt('shop_per_page') ); if ( isset( $_REQUEST['per_page'] ) && ! empty( $_REQUEST['per_page'] ) ) : return intval( $_REQUEST['per_page'] ); elseif ( $s->__isset( 'shop_per_page' ) ) : $val = $s->__get( 'shop_per_page' ); if( ! empty( $val ) ) return intval( $s->__get( 'shop_per_page' ) ); endif; return intval( woodmart_get_opt('shop_per_page') ); } } // **********************************************************************// // ! Items view select on the shop page // **********************************************************************// if( ! function_exists( 'woodmart_shop_view_action' ) ) { add_action( 'woodmart_before_shop_page', 'woodmart_shop_view_action', 100 ); function woodmart_shop_view_action() { if( ! class_exists('WC_Session_Handler')) return; $s = WC()->session; // WC()->session if ( is_null( $s ) ) return; if ( isset( $_REQUEST['shop_view'] ) ) { $s->set( 'shop_view', $_REQUEST['shop_view'] ); } if ( isset( $_REQUEST['per_row'] ) ) { $s->set( 'shop_per_row', $_REQUEST['per_row'] ); } } } // **********************************************************************// // ! Get Items per ROW number on the shop page // **********************************************************************// if( ! function_exists( 'woodmart_get_products_columns_per_row' ) ) { function woodmart_get_products_columns_per_row() { if( ! class_exists('WC_Session_Handler') ) return; $s = WC()->session; // WC()->session if ( is_null( $s ) ) return intval( woodmart_get_opt('products_columns') ); if ( isset( $_REQUEST['per_row'] ) ) { return intval( $_REQUEST['per_row'] ); }elseif ( $s->__isset( 'shop_per_row' ) ) { return intval( $s->__get( 'shop_per_row' ) ); }else { return intval( woodmart_get_opt('products_columns') ); } } } if( ! function_exists( 'woodmart_get_shop_view' ) ) { function woodmart_get_shop_view() { if( ! class_exists('WC_Session_Handler') ) return; $s = WC()->session; // WC()->session if ( is_null( $s ) ) return woodmart_get_opt('shop_view'); if ( isset( $_REQUEST['shop_view'] ) ) { return $_REQUEST['shop_view']; }elseif ( $s->__isset( 'shop_view' ) ) { return $s->__get( 'shop_view' ); }else { $shop_view = woodmart_get_opt('shop_view'); if ( $shop_view == 'grid_list' ) { return 'grid'; }elseif( $shop_view == 'list_grid'){ return 'list'; }else{ return $shop_view; } } } } /** * ------------------------------------------------------------------------------------------------ * Remove () from numbers in categories widget * ------------------------------------------------------------------------------------------------ */ if( ! function_exists( 'woodmart_filter_product_categories_widget_args' ) ) { function woodmart_filter_product_categories_widget_args( $list_args ) { $list_args['walker'] = new WOODMART_WC_Product_Cat_List_Walker(); return $list_args; } add_filter( 'woocommerce_product_categories_widget_args', 'woodmart_filter_product_categories_widget_args', 10, 1); } /** * ------------------------------------------------------------------------------------------------ * AJAX add to cart for all product types * ------------------------------------------------------------------------------------------------ */ if( ! function_exists( 'woodmart_ajax_add_to_cart' ) ) { function woodmart_ajax_add_to_cart() { // Get messages ob_start(); wc_print_notices(); $notices = ob_get_clean(); // Get mini cart ob_start(); woocommerce_mini_cart(); $mini_cart = ob_get_clean(); // Fragments and mini cart are returned $data = array( 'notices' => $notices, 'fragments' => apply_filters( 'woocommerce_add_to_cart_fragments', array( 'div.widget_shopping_cart_content' => '<div class="widget_shopping_cart_content">' . $mini_cart . '</div>' ) ), 'cart_hash' => apply_filters( 'woocommerce_add_to_cart_hash', WC()->cart->get_cart_for_session() ? md5( json_encode( WC()->cart->get_cart_for_session() ) ) : '', WC()->cart->get_cart_for_session() ) ); wp_send_json( $data ); die(); } } add_action( 'wp_ajax_woodmart_ajax_add_to_cart', 'woodmart_ajax_add_to_cart' ); add_action( 'wp_ajax_nopriv_woodmart_ajax_add_to_cart', 'woodmart_ajax_add_to_cart' ); /** * ------------------------------------------------------------------------------------------------ * Function to prepare classes for grid element (column) * ------------------------------------------------------------------------------------------------ */ if ( ! function_exists( 'woodmart_get_grid_el_class' ) ) { function woodmart_get_grid_el_class( $loop = 0, $columns = 4, $different_sizes = false, $xs_size = false, $sm_size = 4, $lg_size = 3, $md_size = false ) { $classes = ''; $items_wide = woodmart_get_wide_items_array( $different_sizes ); if ( ! $xs_size ) { $xs_size = apply_filters( 'woodmart_grid_xs_default', 6 ); } if ( $columns > 0 ) { $lg_size = 12 / $columns; } if ( ! $md_size ) { $md_size = $lg_size; } if ( $columns > 4 ) { $md_size = 3; } if ( $columns <= 3 ) { if ( $columns == 1 ) { $sm_size = 12; $xs_size = 12; } else { $sm_size = 6; } } // Change the layout alternating columns if ( $different_sizes && ( in_array( $loop, $items_wide ) )) { switch ($columns): case 3: $lg_size = 6; $md_size = 6; break; case 4: $lg_size = 4; $md_size = 4; break; case 5: $lg_size = 3; $md_size = 3; break; case 6: $lg_size = '20_0'; $md_size = 3; break; endswitch; } /* Because you made a custom work for showing 5 columns layout i rewrote the code so that when the Products grid with different sizes is disabled the columns work as normal but when is enabled to make the 5-4-5 layout work */ if ( ! $different_sizes && ( in_array( $columns, array( 5, 7, 8, 9, 10, 11 ) ) )) { $lg_size = str_replace( '.', '_', round( 100 / $columns, 1 ) ); if ( ! strpos( $lg_size, '_' ) ) { $lg_size = $lg_size . '_0'; } } if ( ! in_array( $loop, $items_wide ) && ( in_array( $columns, array( 5, 7, 8, 9, 10, 11 ) ) ) ) { $lg_size = str_replace( '.', '_', round( 100 / $columns, 1 ) ); if ( ! strpos( $lg_size, '_' ) ) { $lg_size = $lg_size . '_0'; } } $sizes = array( array( 'name' => 'col-lg', 'value' => $lg_size, ), array( 'name' => 'col-md', 'value' => $md_size, ), array( 'name' => 'col-sm', 'value' => $sm_size, ), array( 'name' => 'col', 'value' => $xs_size, ), ); $result_sizes = array(); foreach ( $sizes as $index => $value ) { if ( isset( $sizes[$index + 1] ) ) { $next = $sizes[$index + 1]; } else { continue; } if ( $value['value'] === $next['value'] ) { $result_sizes[$next['name']] = $next['value']; unset($result_sizes[$value['name']]); } else if ( $value['value'] !== $next['value'] ) { $result_sizes[$value['name']] = $value['value']; $result_sizes[$next['name']] = $next['value']; } } if ( apply_filters( 'woodmart_old_product_grid_classes', false ) ) { $result_sizes = array( 'col-lg' => $lg_size, 'col-md' => $md_size, 'col-sm' => $sm_size, 'col' => $xs_size, ); } foreach ( $result_sizes as $size => $value ) { $classes .= ' ' . $size . '-' . $value; } if ( $loop > 0 && $columns > 0 ) { if ( 0 == ( $loop - 1 ) % $columns || 1 == $columns ) { $classes .= ' first '; } if ( 0 == $loop % $columns ) { $classes .= ' last '; } } return $classes; } } if ( ! function_exists( 'woodmart_get_wide_items_array' ) ) { function woodmart_get_wide_items_array( $different_sizes = false ){ //To create an array big enough so that the alternate pattern repeats and not stops after few products $loop_cycle = 999; //Get the selected columns $perrow = apply_filters( 'loop_shop_columns', woodmart_get_products_columns_per_row() ); /** You default function defined an array of ( 5, 6, 7, 8, 13, 14 ) basically what it does was to change the product size in products that were inside this array, after the 14 product the repeated pattern stoped. Below i create a function that does the following thing. If you choose a 3 column layout it puts in array the numbers 4, 5 then skips 6, 7, 8 and puts 9, 10 and so on. These numbers in array are the positions of the products that have to change the size so that the final result looks like 3, 3, 3 2, 2 => products position 4, 5 3, 3, 3 2, 2 => products position 9, 10 and so on Another example is 4, 4, 4, 4 3, 3, 3 => products position 5, 6, 7 4, 4, 4, 4 3, 3, 3 => products position 12, 13, 14 This function works according to what collumn you have selected. So if you select a grid layout with 3 columns the pattern will be 3/2 For 4 columns the pattern will be 4/3 for 5 5/4 for 6 6/5 **/ //My custom function Starts $stop = ($perrow+($perrow-1))*$loop_cycle; $cycle = $perrow+($perrow-1); $arr = array(); for ($i=1; $i<=$stop; $i++) { if ($i>($cycle-($perrow-1)) && $i<=$cycle) { array_push($arr, $i); if ($i==$cycle) $cycle += $perrow+($perrow-1); } else continue; } return $arr; //My custom function Ends //Instead of array( 5, 6, 7, 8, 13, 14 ) i put the $arr array that generated above $items_wide = apply_filters( 'woodmart_wide_items', array( $arr ) ); if( is_array( $different_sizes ) ) { $items_wide = apply_filters( 'woodmart_wide_items', $different_sizes ); } return $items_wide; } } /** * ------------------------------------------------------------------------------------------------ * Woodmart Related product count * ------------------------------------------------------------------------------------------------ */ if( ! function_exists( 'woodmart_related_count' ) ) { add_filter( 'woocommerce_output_related_products_args', 'woodmart_related_count' ); function woodmart_related_count() { $args['posts_per_page'] = ( woodmart_get_opt( 'related_product_count' ) ) ? woodmart_get_opt( 'related_product_count' ) : 8; return $args; } } /** * ------------------------------------------------------------------------------------------------ * Reset loop * ------------------------------------------------------------------------------------------------ */ if( ! function_exists( 'woodmart_reset_loop' ) ) { function woodmart_reset_loop() { unset( $GLOBALS['woodmart_loop'] ); woodmart_setup_loop(); } add_action( 'woocommerce_after_shop_loop', 'woodmart_reset_loop', 1000 ); add_action( 'loop_end', 'woodmart_reset_loop', 1000 ); } /** * ------------------------------------------------------------------------------------------------ * Get loop prop * ------------------------------------------------------------------------------------------------ */ if( ! function_exists( 'woodmart_loop_prop' ) ) { function woodmart_loop_prop( $prop, $default = '' ) { woodmart_setup_loop(); return isset( $GLOBALS['woodmart_loop'], $GLOBALS['woodmart_loop'][ $prop ] ) ? $GLOBALS['woodmart_loop'][ $prop ] : $default; } } /** * ------------------------------------------------------------------------------------------------ * Set loop prop * ------------------------------------------------------------------------------------------------ */ if( ! function_exists( 'woodmart_set_loop_prop' ) ) { function woodmart_set_loop_prop( $prop, $value = '' ) { if ( ! isset( $GLOBALS['woodmart_loop'] ) ) woodmart_setup_loop(); $GLOBALS['woodmart_loop'][ $prop ] = $value; } } /** * ------------------------------------------------------------------------------------------------ * Setup loop * ------------------------------------------------------------------------------------------------ */ if( ! function_exists( 'woodmart_setup_loop' ) ) { function woodmart_setup_loop( $args = array() ) { if ( isset( $GLOBALS['woodmart_loop'] ) ) return; // If the loop has already been setup, bail. $default_args = array( 'products_different_sizes' => woodmart_get_opt( 'products_different_sizes' ), 'product_categories_design' => woodmart_get_opt( 'categories_design' ), 'product_categories_shadow' => woodmart_get_opt( 'categories_with_shadow' ), 'products_columns' => ( woodmart_get_opt( 'per_row_columns_selector' ) ) ? apply_filters( 'loop_shop_columns', woodmart_get_products_columns_per_row() ) : woodmart_get_opt( 'products_columns' ), 'product_categories_style' => false, 'product_hover' => woodmart_get_opt( 'products_hover' ), 'products_view' => woodmart_get_shop_view(), 'products_masonry' => woodmart_get_opt( 'products_masonry' ), 'timer' => woodmart_get_opt( 'shop_countdown' ), 'progress_bar' => woodmart_get_opt( 'grid_stock_progress_bar' ), 'swatches' => false, 'is_slider' => false, 'is_shortcode' => false, 'is_quick_view' => false, 'woocommerce_loop' => 0, 'woodmart_loop' => 0, 'parts_media' => true, 'parts_title' => true, 'parts_meta' => true, 'parts_text' => true, 'parts_btn' => true, 'blog_design' => woodmart_get_opt( 'blog_design' ), 'blog_type' => false, 'blog_columns' => woodmart_get_opt( 'blog_columns' ), 'img_size' => false, 'double_size' => false, 'portfolio_style' => woodmart_get_opt( 'portoflio_style' ), 'portfolio_column' => woodmart_get_opt( 'projects_columns' ), ); $GLOBALS['woodmart_loop'] = wp_parse_args( $args, $default_args ); } add_action( 'woocommerce_before_shop_loop', 'woodmart_setup_loop', 10 ); add_action( 'wp', 'woodmart_setup_loop', 50 ); add_action( 'loop_start', 'woodmart_setup_loop', 10 ); } /** * ------------------------------------------------------------------------------------------------ * Hide woocommerce notice * ------------------------------------------------------------------------------------------------ */ if ( ! function_exists( 'woodmart_hide_outdated_templates_notice' ) ) { function woodmart_hide_outdated_templates_notice( $value, $notice ) { if ( $notice == 'template_files' ) { return false; } return $value; } add_filter( 'woocommerce_show_admin_notice', 'woodmart_hide_outdated_templates_notice', 2, 10 ); } /** * ------------------------------------------------------------------------------------------------ * Fix for single product image sizes * ------------------------------------------------------------------------------------------------ */ if ( ! function_exists( 'woodmart_single_product_image_sizes') ) { function woodmart_single_product_image_sizes() { $sizes = wc_get_image_size( 'woocommerce_single' ); if ( ! $sizes['height'] ) { $sizes['height'] = $sizes['width']; } return array( $sizes['width'], $sizes['height'] ); } add_filter( 'woocommerce_gallery_thumbnail_size', 'woodmart_single_product_image_sizes' ); } /** * ------------------------------------------------------------------------------------------------ * Change single product notice position * ------------------------------------------------------------------------------------------------ */ remove_action( 'woocommerce_before_single_product', 'woocommerce_output_all_notices', 10 ); remove_action( 'woocommerce_before_shop_loop', 'woocommerce_output_all_notices', 10 ); add_action( 'woodmart_before_single_product_summary_wrap', 'woocommerce_output_all_notices', 10 ); add_action( 'woodmart_before_shop_page', 'woocommerce_output_all_notices', 10 );
In reply to: Single product Page
Hello,
If you want to add description and additional info in your product then edit your product and add your’s description in WP-Bakery block.
Screenshot for clarification: https://jmp.sh/FjMC2R3
In general the additional information tab only shown when you add attributes to the products. If you want to add the Additional information tab you have to add all those attributes from the product as in the screenshot: https://jmp.sh/2pFIr97
Result: https://jmp.sh/AMlSqki
To add SKU/category/share after the product tabs. Then go to theme settings >> Product Page >> SHOW / HIDE ELEMENTS >> Show product meta. You need to choose “After Tabs” option.
In order to display “You may also like..” you need to enter a product editing mode and add products into Upsells of Linked product tabs as shown: http://prntscr.com/j5tv88
You will find more information here: https://docs.woocommerce.com/document/related-products-up-sells-and-cross-sells/To display the related products section you need to enable the “Show related products” option from Theme Settings >> Product Page >> SHOW / HIDE ELEMENTS.
Then you have to select a category from the product edit page as in the screenshot: https://jmp.sh/yqABzGC
For example, if you have three products and all of them are of the same category then in the related products section of all those three products the other remaining 2 products will be shown.
No, there is no such option to show you may also like section in the right sidebar.
Best Regards.
Topic: website update problems since…
in forum WoodMart support forumdelroydore@undercontrol.co.ukParticipantDecember 3, 2019 at 1:22 pm #160807Hi Since our website has been revised by you guys, we have lost a lot of features.
Eg. DESCRIPTION
ADDITIONAL INFORMATION
REVIEWS (0)
SHIPPING & DELIVERY
They do not sure about the products on the page.
The search feature does not work either.
Can you look into this ASAP.
Also the mobile menu does not work on mobile devices.In reply to: Product Page Additional Information
Hello,
When you set showing an attribute on the product page, WooCommerce generates an additional information tab and shows the attribute.
In general the additional information tab only shown when you add attributes to the products. If you want to add the Additional information tab you have to add all those attributes from the product as in the screenshot: https://jmp.sh/2pFIr97
Result: https://jmp.sh/AMlSqki
Best Regards.
- I’m going to start out with an overlooked feature of woodmart that is extremely powerful and will shrink down your CSS dramatically. Especially when looking at core web vitals and google page speed this will have a positive effect on your score.
-
AuthorSearch Results
-
Search Results
-
Topic: Some minor issues
Topic: Single Product Page