我注意到,我的自定义排序选项在浏览商店时效果很好,但搜索结果失败。当前代码遵循许多可用示例:
// Add "Sort by discount" to sorting options. Defaults to biggest to smallest discount.
add_filter('woocommerce_get_catalog_ordering_args'
,'mycode_woocommerce_add_salediscount_to_catalog_ordering_args'
);
function mycode_woocommerce_add_salediscount_to_catalog_ordering_args( $args ) {
$orderby_value = isset( $_GET['orderby'] )
? wc_clean( $_GET['orderby'] )
: apply_filters('woocommerce_default_catalog_orderby'
,get_option('woocommerce_default_catalog_orderby' )
);
if ( 'discount' == $orderby_value ) {
$args['orderby'] = 'meta_value_num';
$args['order'] = 'DESC';
$args['meta_key'] = 'discount_amount';
}
return $args;
}
add_filter('woocommerce_default_catalog_orderby_options'
,'mycode_woocommerce_add_salediscount_to_catalog_orderby'
);
add_filter('woocommerce_catalog_orderby'
,'mycode_woocommerce_add_salediscount_to_catalog_orderby'
);
function mycode_woocommerce_add_salediscount_to_catalog_orderby( $sortby ) {
$sortby['discount'] = __( 'Sort by discount', 'woocommerce' );
return $sortby;
}
我已将此代码添加到my_custom_code.php
,这是我自己的代码的简单插件。
它基于我商店中每个产品具有的元值进行排序。
在搜索结果页上使用时,该顺序与“相关性”相同,而不是自定义顺序。
在控制顺序的WC代码中,我看到is_search()
在多个地方被调用,并且将顺序重置为“相关性”,但是默认的排序选项可以覆盖此设置,并且它们仍然有效(例如,排序)按价格仍然有效)。
因此,我想我需要稍微调整代码以使其行为与默认搜索选项相同,但是我看不到如何执行此操作。
有人知道吗?
谢谢!
答案 0 :(得分:0)
好吧,我想我已经讲究了。 WC或wordpress没问题。我使用的代码过于简单,无法说明所有可能的情况。
function mycode_woocommerce_add_salediscount_to_catalog_ordering_args( $args ) {
$orderby_value = isset( $_GET['orderby'] )
? wc_clean( $_GET['orderby'] )
: apply_filters('woocommerce_default_catalog_orderby'
,get_option('woocommerce_default_catalog_orderby' )
);
if ( 'discount' == $orderby_value ) {
$args['orderby'] = 'meta_value_num';
$args['order'] = 'DESC';
$args['meta_key'] = 'discount_amount';
}
return $args;
}
该功能首先通过查看GET来检查用户是否已选择排序。如果不存在,则会检索在WC中设置的默认排序顺序。
如果GET或默认排序顺序为“折扣”,则返回折扣排序顺序参数。
问题在于,这并不总是理想的结果。在搜索结果中,所需的排序可能是“相关性”-实际上,这是下拉框中输入的wordpress。但是上面的代码无关紧要。如果默认的排序顺序为“折扣”,则按该顺序排序。
对于简码似乎也是如此。例如,排序可能是“ rand”,但上面的代码并未对此进行检查。它返回折扣参数。