Nsp Code https://www.nsp-code.com Premium WordPress Development Tue, 26 Nov 2019 08:02:40 +0000 en-US hourly 1 https://wordpress.org/?v=4.9.12 How to disable Archive selection on a sort interface https://www.nsp-code.com/how-to-disable-archive-selection-on-a-sort-interface/ https://www.nsp-code.com/how-to-disable-archive-selection-on-a-sort-interface/#respond Tue, 26 Nov 2019 07:58:14 +0000 https://www.nsp-code.com/?p=17480 When creating a simple sort the selection area outputs the Archive and all taxonomies assigned to a particular custom post type: The Archive selection is not always required and can be easily disabled programmatically through a filter: The filter is available since plugin version 4.3.3.3 The code should be placed inside theme functions.php or a […]

The post How to disable Archive selection on a sort interface appeared first on Nsp Code.

]]>
When creating a simple sort the selection area outputs the Archive and all taxonomies assigned to a particular custom post type:


The Archive selection is not always required and can be easily disabled programmatically through a filter:

    add_filter('apto/wp-admin/reorder-interface/show_taxonomy_selection', 'apto_wp_admin_reorder_interface_show_taxonomy_selection', 10, 2);
    function apto_wp_admin_reorder_interface_show_taxonomy_selection( $show_taxonomy_selection, $sort_ID )
        {
            //Only apply on a specific sort ID
            if  ( $sort_ID  !=   373 )
                return $show_taxonomy_selection;
            
            
            $show_taxonomy_selection    =   FALSE;    
            
            return $show_taxonomy_selection;    
        }

The filter is available since plugin version 4.3.3.3 The code should be placed inside theme functions.php or a custom plugin.

The post How to disable Archive selection on a sort interface appeared first on Nsp Code.

]]>
https://www.nsp-code.com/how-to-disable-archive-selection-on-a-sort-interface/feed/ 0
How to Limit the number of order indexes in post queries https://www.nsp-code.com/how-to-limit-the-number-of-order-indexes-in-post-queries/ https://www.nsp-code.com/how-to-limit-the-number-of-order-indexes-in-post-queries/#respond Fri, 11 Oct 2019 16:24:56 +0000 https://www.nsp-code.com/?p=17310 When using Auto Sort functionality, The Advanced Post Types Order plugin apply the order automatically on front side. This works very easy and does not require any coding skills, the customised order is inserted automatically in all front/dashboard queries which match the sort set-up. In large sites with hundred of thousand of posts, the order […]

The post How to Limit the number of order indexes in post queries appeared first on Nsp Code.

]]>
When using Auto Sort functionality, The Advanced Post Types Order plugin apply the order automatically on front side. This works very easy and does not require any coding skills, the customised order is inserted automatically in all front/dashboard queries which match the sort set-up.

In large sites with hundred of thousand of posts, the order indexes list inserted into the query can slightly decrease the overall speed. Considering that on a page load there are at least several queries, this might become an issue. Fortunate there’s an easy approach for this, through a filter a chunk of the whole list is being used instead, to avoid mentioned scenario. The first part of the order list is being used ( the first 1000 indezes), while the rest of the posts will be ordered as default by post date.

    add_filter( 'apto/get_orderby',     'apto_get_orderby', 10, 5 );
    function apto_get_orderby( $new_orderBy, $orderBy, $sort_view_id, $query, $order_list )
        {
            global $wpdb;
            
	    	//Only on front side
            if  ( is_admin() ) 
			return $new_orderBy;
 
            $_LimitIndexLiatTo  =   1000;
            
            $order_list =   array_slice( $order_list, 0, $_LimitIndexLiatTo ); 
            
            $query_order = isset($query->query['order']) ? strtoupper($query->query['order']) : 'ASC';
            
            $counter = 0;
            
            $orderBy = "CASE ";
            foreach ( $order_list as $value )
                {
                    $counter++;
                    $orderBy .= " WHEN ". $wpdb->posts .".ID = ". $value ."  THEN  ". $counter;   
                }
            
            $counter++;
            if (  $query_order  ==  'DESC')
                $counter    =   0;
            $orderBy .= " ELSE ". $counter ." END, ".$wpdb->posts.".post_date " . $query_order;
                        
            return $orderBy;   
        }
  • *The above code should be placed into theme functions.php or a file into wp-content/mu-plugins/

The post How to Limit the number of order indexes in post queries appeared first on Nsp Code.

]]>
https://www.nsp-code.com/how-to-limit-the-number-of-order-indexes-in-post-queries/feed/ 0
Retrieve posts per customised order through JSON REST API https://www.nsp-code.com/retrieve-posts-per-customised-order-through-json-rest-api/ https://www.nsp-code.com/retrieve-posts-per-customised-order-through-json-rest-api/#respond Wed, 11 Sep 2019 15:44:04 +0000 https://www.nsp-code.com/?p=17189 The JSON REST API service, fully implemented into WordPress since 4.7, provides a great way for other applications to connect. This is a huge step forward, as it can communicate and exchange data regardless of what languages an external program uses. The API support a bunch of endpoints to cover pretty much all existing data. […]

The post Retrieve posts per customised order through JSON REST API appeared first on Nsp Code.

]]>

The JSON REST API service, fully implemented into WordPress since 4.7, provides a great way for other applications to connect. This is a huge step forward, as it can communicate and exchange data regardless of what languages an external program uses.

The API support a bunch of endpoints to cover pretty much all existing data. A full list can be found at https://developer.wordpress.org/rest-api/reference/

Post retrieval through the API can be done by invoking the “posts” endpoint as follow:


curl -X OPTIONS -i https://example.com/wp-json/wp/v2/posts

The full list of supported arguments can be checked at https://developer.wordpress.org/rest-api/reference/posts/#list-posts

To retrieve the list of posts in an order predefined through a custom sort the orderby argument need to be passed through along the API call:


curl -X OPTIONS -i https://example.com/wp-json/wp/v2/posts?categories=1&orderby=menu_order&order=asc

The above return all posts which belong to category id 1, using the order defined in the sort list.

The post Retrieve posts per customised order through JSON REST API appeared first on Nsp Code.

]]>
https://www.nsp-code.com/retrieve-posts-per-customised-order-through-json-rest-api/feed/ 0
WooCommerce – Sort Products which belong to multiple categories https://www.nsp-code.com/woocommerce-sort-products-which-belong-to-multiple-categories/ https://www.nsp-code.com/woocommerce-sort-products-which-belong-to-multiple-categories/#comments Wed, 05 Jun 2019 01:55:40 +0000 http://www.nsp-code.com/?p=602 An easy way to sort products which belong to multiple categories while keeping the previously order set for other places. This will ensure no order list is lost while a new sort is built.
Everything it's done though an intuitive drag and drop interface.

The post WooCommerce – Sort Products which belong to multiple categories appeared first on Nsp Code.

]]>
woo-commerce-logo

Probably the best choice for e-commerce under a WordPress environment, WooCommerce deliver all the juice you need for a successfully e-commerce business.  WooCommerce is built using WordPress best practices both on the front and the back end. This results in an efficient, robust and intuitive plugin.

Product Sorting has been introduced reticently, as an easy method of order customization, this can be done using a drag and drop interface which is similar to default WordPress admin  Products archive. This is a great way for keeping the best selling products on top of the list, which will give a boost to sales . Any decent shop will always use categories to keep the products in one place and make easier access to a certain type of goods. The product sorting can be done for each category using the filter that the admin sort interface display in the first part.

Using other plugins, why my order list broke for a category while i was doing another sorting for a different one?

For all other plugins, the product sorting rely on the default menu_order property, which unfortunate can keep only a value  at a time. Giving that  if a product belong to multiple categories, only the very last sorting order value will be held, everything else will be overwrite. In other words,  if you set a sorting for the products which belong to a category, going to the next one will remove the order you set previously. Obliviously we don’t want that, as every category is required to use a very specific order to achieve planned results. Advanced Post Types Order is a specialized application, the perfect tool for managing the product sorting while keeping the order applied for other categories. No matter the number of categories which belong to a product, the number of categories need to be sorted, all order lists are saved and kept as defined!

First you can select the category for which you want to apply an order:

The order can be also set for other taxonomies defined like Product Tags, Tags etc, everything while keeping the sorts for the other places.

Re-order can be done using a simple drag and drop interface, then using Update to save.

advanced-post-types-order-sort-interface-grid-view

A huge bonus for this plugin is the fact that it can be used also along with all other custom post types within your site (i.e. posts, pages, reviews, movies etc), practically you can sort the order for any content / post type / product.
The usage is very simple, once deployed the plugin will take care of the order update within the front side, no coding updates are necessarily.

The post WooCommerce – Sort Products which belong to multiple categories appeared first on Nsp Code.

]]>
https://www.nsp-code.com/woocommerce-sort-products-which-belong-to-multiple-categories/feed/ 5
Customizing sort through default post type archive interface https://www.nsp-code.com/customizing-sort-through-default-post-type-archive-interface/ https://www.nsp-code.com/customizing-sort-through-default-post-type-archive-interface/#comments Tue, 04 Jun 2019 09:16:36 +0000 http://www.nsp-code.com/?p=1389 Customizing the sort for a site content is the key to improve SEO ratting and keep you in business. Any new visitor will navigate your page just a bit before leave for another site, if not find quality information. Placing the best products and articles in the relevant spots is the way to catch a […]

The post Customizing sort through default post type archive interface appeared first on Nsp Code.

]]>
Customizing the sort for a site content is the key to improve SEO ratting and keep you in business. Any new visitor will navigate your page just a bit before leave for another site, if not find quality information. Placing the best products and articles in the relevant spots is the way to catch a rushed eye.

Advanced Post Types Order plugin provide excellent tools to manage everything when it come to content sorting, moving things around is a breeze job, re-ordering can be achievable through provided intuitive visual interfaces.

To make sorting even easier, a new functionality is now available, any custom post type can be sorted directly within default WordPress archive interface. This is useful specially for users who don’t want to deal with additional menus and prefer to stick with provided WordPress default interfaces. Is also a convenient way to manage order without leaving the admin post type archive page.

The process of setting-up drag and drop order for a post type interface is simple, it start by creating a sort list of a particular post type which is intended to be sorted. More details upon the effectively sort creation can be found at Create simple sort for a Custom Post Type To use this functionality the Admin Sort option need to be active, so any order will reflect on post type interface as well:

Customizing sort through default post type archive interface-admin-sort

Once sort created a new setting show up, this also need to be active:

Customizing sort through default post type archive interface-Allow sorting within default post type interface

At this point everything it’s set-up and ready for sort to be customized within the post type interface. This will work for all archives including all, any taxonomy term filtering, paginated etc.

Customizing sort through default post type archive interface-drag-and-drop

The new order is being saved within post type menu_order attribute, also within sort list for further usage.

The post Customizing sort through default post type archive interface appeared first on Nsp Code.

]]>
https://www.nsp-code.com/customizing-sort-through-default-post-type-archive-interface/feed/ 5
Pagination for large Sort Lists https://www.nsp-code.com/pagination-for-large-sort-lists/ https://www.nsp-code.com/pagination-for-large-sort-lists/#respond Mon, 06 May 2019 16:06:45 +0000 http://www.nsp-code.com/?p=1282 A new functionality is available for Advanced Post Types Order plugin, Pagination for sort lists. A high number of objects to show on a single list, makes the sorting process a bit difficult sometimes, either being slow as loading lots of html code or simply too many to follow certain objects in the list. The […]

The post Pagination for large Sort Lists appeared first on Nsp Code.

]]>
A new functionality is available for Advanced Post Types Order plugin, Pagination for sort lists. A high number of objects to show on a single list, makes the sorting process a bit difficult sometimes, either being slow as loading lots of html code or simply too many to follow certain objects in the list. The Pagination functionality, split the items on multiple pages using a WordPress pagination style. This feature can be controlled for each sort individually through their settings:

Pagination for large Sort Lists - settings

A number of offset objects can be show from a previous / next pagination to facilitate an easy sort for a object across different pages.

Pagination for large Sort Lists - offset objects

The drag & drop functionality is available from / to offset lists.

The post Pagination for large Sort Lists appeared first on Nsp Code.

]]>
https://www.nsp-code.com/pagination-for-large-sort-lists/feed/ 0
Apply Archive Order to Taxonomies Terms / Categories, if no custom order is defined https://www.nsp-code.com/apply-archive-order-to-taxonomies-terms-categories-if-no-custom-order-is-defined/ https://www.nsp-code.com/apply-archive-order-to-taxonomies-terms-categories-if-no-custom-order-is-defined/#respond Mon, 15 Apr 2019 10:42:12 +0000 https://www.nsp-code.com/?p=16702 When migrating from free Post Types Order, on activation. the Advanced Post Types plugin automatically import the previously customized order. This is saved within Archive area, since this is the type of sorting the free code is capable off. The other areas as taxonomies terms like categories, inherit default sorting by date as there’s never […]

The post Apply Archive Order to Taxonomies Terms / Categories, if no custom order is defined appeared first on Nsp Code.

]]>
When migrating from free Post Types Order, on activation. the Advanced Post Types plugin automatically import the previously customized order. This is saved within Archive area, since this is the type of sorting the free code is capable off. The other areas as taxonomies terms like categories, inherit default sorting by date as there’s never been applied a customized order.

To apply the Archive order to all areas just like the Post Types Order does, but still allow and apply any customized sorting (e.g. a specific category), the following code can be used. This should be placed within theme functions.php or a custom plugin.

    add_filter('apto/query_match_sort_id',  'apto_query_match_sort_id', 10, 4); 
    function apto_query_match_sort_id($sort_view_id, $orderBy, $query, $sorts_match_filter)
        {
            global $APTO;
            
            //if the's a custom sort, return
            if(!empty($sort_view_id))
                {
                    //ensure the list is not empty
                    $order_list  = $APTO->functions->get_order_list($sort_view_id);
                    if  ( is_array( $order_list ) &&  count ( $order_list )     >   1 )
                        return $sort_view_id;    
                }
            
            $query_post_types   =   $APTO->functions->query_get_post_types($query);
            
            $sorts_match_filter =   array(
                                            '_autosort'     =>  array('yes'),
                                            '_view_type'    =>  array('multiple')
                                            );
            $sort_items =   $APTO->functions->get_sorts_by_filters($sorts_match_filter);
            
            if(count($sort_items) < 1)
                return;
            
            foreach($sort_items as  $sort_item)
                {
                    $sort_settings  =   $APTO->functions->get_sort_settings($sort_item->ID);
                    ///check the sort rules if match the post types
                    $sort_rules =   $APTO->functions->get_sort_current_language_rules($sort_settings);
                    
                    //compare the post type args
                    $differences = array_diff($query_post_types, $sort_rules['post_type']);
                    if(count($query_post_types) != count($sort_rules['post_type']) || count($differences) > 0)
                        continue;
                    
                    //this match. Get the archive sort view
                    $attr = array(
                                    '_view_selection'       =>  'archive',
                                    '_view_language'        =>  $APTO->functions->get_blog_language()  
                                    );
                                                       
                    $sort_view_id   =   $APTO->functions->get_sort_view_id_by_attributes($sort_item->ID, $attr);
                    
                    break;
                }
            
            return $sort_view_id;
             
        }

If the order is updated for any term, this is being used instead rater applying the default Archive.

The post Apply Archive Order to Taxonomies Terms / Categories, if no custom order is defined appeared first on Nsp Code.

]]>
https://www.nsp-code.com/apply-archive-order-to-taxonomies-terms-categories-if-no-custom-order-is-defined/feed/ 0
Synchronize order across all languages when using Polylang https://www.nsp-code.com/synchronize-order-across-all-languages-when-using-polylang/ https://www.nsp-code.com/synchronize-order-across-all-languages-when-using-polylang/#respond Mon, 01 Apr 2019 18:54:39 +0000 https://www.nsp-code.com/?p=16644 WordPress Polylang plugin allows to create multilingual content for your site, easily. You write any content type, like post, pages, categories, tags, define the language for each and translate. Advanced Post Types Order can sort the Polylang content. Everything is manages through the same, easy to manage sort lists. If order is required to be […]

The post Synchronize order across all languages when using Polylang appeared first on Nsp Code.

]]>

WordPress Polylang plugin allows to create multilingual content for your site, easily. You write any content type, like post, pages, categories, tags, define the language for each and translate.

Advanced Post Types Order can sort the Polylang content. Everything is manages through the same, easy to manage sort lists.

If order is required to be the same on all site languages, the Advanced Post Types Order plugin include a specialized tool which synchronize the newly updated order to all other lists. This is integrated into the application and controlled through a sort option:

When set to Yes, on a sort update, the plugin recreate the same order for all active languages. If the synchronization is not required the option can be left off, in which case the order of each language can be controlled individually.

The post Synchronize order across all languages when using Polylang appeared first on Nsp Code.

]]>
https://www.nsp-code.com/synchronize-order-across-all-languages-when-using-polylang/feed/ 0
How to Order Posts by Category Name https://www.nsp-code.com/how-to-order-posts-by-category-name/ https://www.nsp-code.com/how-to-order-posts-by-category-name/#respond Mon, 04 Mar 2019 17:34:33 +0000 https://www.nsp-code.com/?p=16527 Creating custom Sort for Posts (or any other custom post type) within categories is an easy task using the Advanced Post Types Order plugin, a visual drag & drop interface is easy to set-up and self explanatory. The order can be customized for individual categories which apply accordingly on front side when view such area […]

The post How to Order Posts by Category Name appeared first on Nsp Code.

]]>
Creating custom Sort for Posts (or any other custom post type) within categories is an easy task using the Advanced Post Types Order plugin, a visual drag & drop interface is easy to set-up and self explanatory. The order can be customized for individual categories which apply accordingly on front side when view such area (e.g. category link).

But how to automatically re-order the Posts, when view the archive, by category name it belong? Or by child category name (in case to view a category which include child terms)?
For example we have the following categories:

  • Arts
  • Books
  • Movies

When view the archive (all posts) the default order of posts is set to Date, or to custom defined order if created. In this scenario we require the sorting of posts to be by category name, meaning all posts for Arts category comes first, then the posts from Books and lastly from the Movies. Even more, we need to apply the order of posts set-up for each category (if created).

This is not something easy to achieve and require basic level of adjustments at the code level, so the functionality does not come integrated into the core. The plugin contain the necessarily tools to use and implement such feature, mainly relaying on User Function sorting callback
First the order should be switched to Automatic and the Order By selection should be set for Custom Function The function name which will be used in current example is called sort_by_category_name so it should be updated accordingly with your.

Further a custom code which return the required order need to be implemented. The code block should be included with theme functions.php or a custom plugin. The function need to use the same name as defined in above interface.


/**
    * Sort the elements by category name, or customised catgory order
    * 
    * @param mixed $sort_list
    * @param mixed $sort_view_id
    * @param mixed $orderBy
    * @param mixed $query
    */
    function sort_by_category_name( $post_order_list, $sort_view_id, $orderBy, $query )
        {
                
            //Change to required taxonomy
            $_apply_for_taxonomy    =   "category";

In this example, the code will sort by categories taxonomy, but this can be changed to anything else, accordingly to required results. This can be done by changing the above line 13 at variable $_apply_for_taxonomy


			if ( count($post_order_list) > 1 ) 
			return $post_order_list; 
		//check if is archive or a taxonomy view 
		if ( count ($query->tax_query->queries) > 1 )
                	return $post_order_list;
                
                
            //avoid endless loop in case using this function on multiple level terms
            global $_SCN_in_the_loop;
            
            if  ( $_SCN_in_the_loop )
                return $post_order_list;
            
            $_is_archive    =   FALSE;
            $_is_term       =   FALSE;

The sorting by category name functionality can be used for Archive selection (all posts), also it can be set-up for individual Categories as well, as long they include child terms which can be used to order by. The following code part check on that:


	if  ( count ($query->tax_query->queries) > 0 )
                {
                    //ensure there's a single term
                    reset($query->tax_query->queries);
                    $tax    =   current($query->tax_query->queries);
                    
                    if  ( is_array($tax['terms'])   &&  count ($tax['terms'])  > 1 )
                        return $post_order_list;
                    
                    $_is_term   =   TRUE;
                }
                else
                $_is_archive    =   TRUE;
                
            //retrive the terms
            $args   =   array(
                                        'taxonomy'  =>  $_apply_for_taxonomy,
                                        'orderby'   => 'name',
                                        );

For retrieving the terms list, the code use an orderby argument by name. In case a custom order of categories is required to be used instead, the Advanced taxonomy Terms Order plugin can be used to change the order of categories. Then the orderby should be update to term_order in above code block at line 18

            if  ( $_is_term ) 
                {
                    //retrieve a list of existing terms
                    reset($query->tax_query->queries);
                    $tax    =   current($query->tax_query->queries);
                    
                    if  ( is_array( $tax['terms'] ))
                        {
                            reset( $tax['terms'] );
                            $term_id    =   current( $tax['terms'] );
                        }
                        else
                            $term_id    =   $tax['terms'];
                    
                    if ( $tax['field']  ==  'slug'  ||  $tax['field']  ==  'name' )
                        {
                            $term_data      =   get_term_by( $tax['field'], $term_id, $_apply_for_taxonomy );
                            $term_id        =   $term_data->term_id;
                        } 
                    
                    
                    $args['child_of']   =   $term_id;  

                }

At this point retrieve the categories (terms) which will be used to sort and build the ordered list of posts which will be returned:

	$terms  =   get_terms( $args );
            
            //retrieve a list of items for each of the terms
            if ( count ( $terms )   < 1 ) return $post_order_list; $_SCN_in_the_loop = TRUE; global $APTO; $sort_view_post = get_post( $sort_view_id ); $sort_list_settings = $APTO->functions->get_sort_settings( $sort_view_post->post_parent );
            
            $posts_list =   array();
            foreach ( $terms as  $term )
                {
                    $args =   array(
                                            'post_type'         =>  $sort_list_settings['_rules']['post_type'][0],
                                            'posts_per_page'    =>  -1,
                                            'fields'            =>  'ids',
                                            'orderby'           =>  'menu_order',
                                            'order'             =>  'ASC',
                                            'tax_query'         => array(
                                                                            array(
                                                                                'taxonomy' =>   $_apply_for_taxonomy,
                                                                                'field'    =>   'id',
                                                                                'terms'    =>   array( $term->term_id ),
                                                                            ),
                                                                        ),
                                    );
                    $term_posts_query  =  new WP_Query( $args );
                    $posts_list =   array_merge ( $posts_list , array_values( $term_posts_query->posts ));
                    
                }
                    
            $_SCN_in_the_loop = FALSE;
            
            return $posts_list; 
            
        }

The order list is returned to the plugin core and applied to the query.

This is a functionality which require a bit more resources than a regular ordering, specially on very large sites with thousand of posts, but can be easily overtaken using a cache plugin. This way the code will be process once, further being served by a static cached data.

The post How to Order Posts by Category Name appeared first on Nsp Code.

]]>
https://www.nsp-code.com/how-to-order-posts-by-category-name/feed/ 0
How to apply WooCommerce category order while using visual attributes filtering https://www.nsp-code.com/how-to-apply-woocommerce-category-order-while-using-visual-attributes-filtering/ https://www.nsp-code.com/how-to-apply-woocommerce-category-order-while-using-visual-attributes-filtering/#respond Tue, 15 Jan 2019 12:05:25 +0000 https://www.nsp-code.com/?p=16293 Sorting WooCommerce products is an easy job, specific area ordering is possible after selecting the appropriate taxonomy or attribute.  When using mix of multiple taxonomies or/and attributes a sort is still easy to create through advanced set-up Sometimes, there’s no need to apply a very specific order for all those areas, as it become impractical […]

The post How to apply WooCommerce category order while using visual attributes filtering appeared first on Nsp Code.

]]>

Sorting WooCommerce products is an easy job, specific area ordering is possible after selecting the appropriate taxonomy or attribute.  When using mix of multiple taxonomies or/and attributes a sort is still easy to create through advanced set-up

Sometimes, there’s no need to apply a very specific order for all those areas, as it become impractical and hard to maintain. Might be a better approach to use a simple sorting which apply to categories, even if there’s additional visual filters used.

The following image illustrate a category instance where the customized order is applied accordingly. There is no visual filter used so far.

When making a selection on the left filters, the internal WordPress query changes and will not match the simple category ordering anymore. It will try to locate an advanced sort which include the appropriate settings (e.g. selected category, selected filter etc). If none are found, the default query order is returned.

 

The above, is still a category area, but using additional filters. There’ still possible to use the simple category order and apply to above, without creating customized order for each of possible combinations. This can be achieved easily by enabling the functionality through the “Use category order for WooCommerce when apply filters” option, available at admin dashboard > Settings > Post Types Order:

The feature is available starting version 4.2.

For older versions this can be implemented through a filter ‘apto/query_filter_valid_data’. The following code should be used along with theme functions.php :

    add_filter('apto/query_filter_valid_data', 'custom_woocommerce_query_filter_valid_data', 99);
    function custom_woocommerce_query_filter_valid_data( $query )
        {
            
            if (!in_array( 'woocommerce/woocommerce.php', apply_filters( 'active_plugins', get_option( 'active_plugins' ) ) ) )
                return $query;
                
            $tax_data   =   $query->tax_query->queries;
            
            if(isset($tax_data['relation']))
                unset($tax_data['relation']);
            
            $found  =   FALSE;    
            //ensure the query include a product_cat taxonomy
            foreach( $tax_data  as  $key    =>  $item_tax_data )
                {
                    if ( !isset ( $item_tax_data['taxonomy'] ) )
                        return $query;
                        
                    if ( $item_tax_data['taxonomy']  !=  'product_cat' )
                        continue;
                    
                    if( count((array)$item_tax_data['terms'])    !=  1 )
                        return $query;
                
                    $found  =   TRUE;
                }
                
            if ( $found === FALSE )
                return $query;
                
            //unest all other taxonomies
            foreach ( $query->tax_query->queries    as  $key    =>  $item_tax_data )
                {
                    if ( ! is_int($key) )
                        continue;
                        
                    if ( $item_tax_data['taxonomy']  !=  'product_cat' )
                        unset ( $query->tax_query->queries[$key] );
                    
                }
            
            return $query;
            
        }

The post How to apply WooCommerce category order while using visual attributes filtering appeared first on Nsp Code.

]]>
https://www.nsp-code.com/how-to-apply-woocommerce-category-order-while-using-visual-attributes-filtering/feed/ 0