Woocommerce自定义orderby在搜索结果中不起作用

时间:2018-11-12 15:28:22

标签: php woocommerce hook-woocommerce

我注意到,我的自定义排序选项在浏览商店时效果很好,但搜索结果失败。当前代码遵循许多可用示例:

// 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()在多个地方被调用,并且将顺序重置为“相关性”,但是默认的排序选项可以覆盖此设置,并且它们仍然有效(例如,排序)按价格仍然有效)。

因此,我想我需要稍微调整代码以使其行为与默认搜索选项相同,但是我看不到如何执行此操作。

有人知道吗?

谢谢!

1 个答案:

答案 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”,但上面的代码并未对此进行检查。它返回折扣参数。