在WooCommerce中,可以使用pre_get_posts
钩子来修改产品列表的排序。以下是一个示例代码,可以按属性对产品列表进行排序:
// 添加一个新的排序选项
add_filter('woocommerce_get_catalog_ordering_args', 'custom_catalog_ordering_args');
function custom_catalog_ordering_args($args)
{
$orderby_value = isset($_GET['orderby']) ? wc_clean($_GET['orderby']) : '';
if ($orderby_value == 'custom_attribute') {
$args['orderby'] = 'meta_value_num';
$args['order'] = 'ASC';
$args['meta_key'] = 'custom_attribute';
}
return $args;
}
// 显示新的排序选项
add_filter('woocommerce_catalog_orderby', 'custom_catalog_orderby');
function custom_catalog_orderby($sortby)
{
$sortby['custom_attribute'] = '按属性排序';
return $sortby;
}
上述代码中,首先通过woocommerce_get_catalog_ordering_args
过滤器添加了一个新的排序选项。当用户选择该选项时,将使用meta_key
来排序,其中meta_key
为你要按其排序的属性名称。
然后,通过woocommerce_catalog_orderby
过滤器将新的排序选项添加到排序选项列表中,这样用户就可以在产品列表页面中选择按属性排序。
请注意,上述代码需要添加到主题的functions.php
文件中或者自定义插件中。