-
-
Save mikejolley/1622323 to your computer and use it in GitHub Desktop.
/** | |
* This code should be added to functions.php of your theme | |
**/ | |
add_filter('woocommerce_default_catalog_orderby', 'custom_default_catalog_orderby'); | |
function custom_default_catalog_orderby() { | |
return 'date'; // Can also use title and price | |
} | |
Q:- How to sort differently for a particular category e.g. XYZ category? Please help me
add_filter('woocommerce_get_catalog_ordering_args', 'pnp_woocommerce_catalog_orderby');
function pnp_woocommerce_catalog_orderby( $args ) {
$args['meta_key'] = 'xyzEventsDate';
$args['orderby'] = date('Y-m-d', strtotime('meta_value_date'));
$args['order'] = 'DESC';
return $args;
}
#1 Till now I have now idea how to run the filter function only for a particular category?
#2 Am I doing right in the above code?
I would like for one category to be sorted, by default, a different way to the others.
eg - 'new arrivals' default sorted by date - all other categories sorted by popularity.
I have set the default sorting to 'popularity' within the woocommerce settings.
My code below results in the /product-category/new-arrivals page returning no products.
Here is my code to change the sorting order for /product-category/new-arrivals.
`add_filter('woocommerce_get_catalog_ordering_args','tolka_change_ordering',10,1);
function tolka_change_ordering($args)
{
if(is_product_category())
{
global $wp_query;
$cat = $wp_query->get_queried_object();
var_dump($args);
if($cat->term_id === 68) //new arrivals
{
$args['orderby'] = 'date ID';
$args['order'] = 'ASC';
$args['meta_key'] = '';
}
}
var_dump($args);
return $args;
}
`
Here is the output of the var_dumps:
`array(3) { ["orderby"]=> string(16) "menu_order title" ["order"]=> string(3) "ASC" ["meta_key"]=> string(11) "total_sales" }
array(3) { ["orderby"]=> string(7) "date ID" ["order"]=> string(3) "ASC" ["meta_key"]=> string(0) "" }`
Any input would be appreciated :)
Dee
ps - not sure what's going on with the formatting - couldn't get the full function in a code block.
Thanks
It help me in setup default sorting order for specific category only.
code :
function custom_default_catalog_orderby() {
if( is_product_category('jeans-women')) // jeans-women slug of category for which u want default sort on Date
return 'date'; // Can also use title and price
}
None of the code on this page works completely.
Here's a blog post that explains exactly what everyone is trying to do:
https://webhostingbuddy.com/blog/woocommerce-default-sort-method-for-specific-category/
TY :)
Obrigado!
Thank you so much. I try to re-order by modified date and got stuck. Now I see your code. It's save my day.
add_filter('woocommerce_get_catalog_ordering_args', 'am_woocommerce_catalog_orderby');
function am_woocommerce_catalog_orderby( $args ) {
$args['meta_key'] = '';
$args['orderby'] = 'modified';
$args['order'] = 'desc';
return $args;
}
Thanks you i have success in my site
Hi everyone, I'm deal with default sorting with meta key. Using ReHub theme + Woocomerce. I need to have sorted all product regarding their rehub_review_overall_score - it's meta key in ReHub theme.
//Adding custom sort
add_filter( 'woocommerce_get_catalog_ordering_args', 'custom_product_sorting' );
function custom_product_sorting( $args ) {
// Sort score DESC
if ( isset( $_GET['orderby'] ) && 'score-desc' === $_GET['orderby'] ) {
$args['meta_key'] = 'rehub_review_overall_score';
$args['orderby'] = 'meta_value_num';
$args['order'] = 'desc';
}
return $args;
}
//have custom sort as default
add_filter('woocommerce_default_catalog_orderby', 'default_catalog_orderby');
function default_catalog_orderby( $sort_by ) {
return 'score-desc';
}
The code is working properly only when I use it in URL, like ?orderby=score-desc but for default it's not sorting the products regarding their score.
Do you know where is the problem and how to solve it?
Thak you very much
If you want the catalog ordering to still work properly you should wrap your code in something like:
function woocommerce_catalog_orderby( $args ) {
if(!$_GET['orderby']) {
$args['orderby'] = 'menu_order';
$args['order'] = 'asc';
}
return $args;
}I was having a problem with a client wanting a specific order while also wanting the sorting to still function. This worked.
Thank you sir! 👍
@hoaiphatcr YOU saved my day!!!! thanks!!!
This Gist has been mentioned on Stack Overflow a few times:
https://stackoverflow.com/questions/47627079/sort-products-by-desc-order-in-woocommerce
A few other related threads:
Is it possible to sort by stock status?