更改WooCommerce产品查询以随机排序

时间:2017-10-09 20:26:30

标签: php mysql wordpress woocommerce hook-woocommerce

到目前为止,我已经发现我需要使用以下钩子来更改WooCommerce产品查询:

add_action( 'woocommerce_product_query', 'xxxx_product_query' );
function xxxx_product_query( $q ){

    ...do something here...
}

但我该怎么做:

1.使查询随机排序所有产品;

2.按顺序保存随机分拣的产品30天,然后在30天到期后再次更改;

3.使用自定义字段“_new”的所有产品始终出现在查询的开头(这些不应随机排序)。

提前感谢您的帮助!

1 个答案:

答案 0 :(得分:-1)

您可以使用functions.php文件中的此代码,在“产品/显示”标签下的WooCommerce设置页面中为默认排序顺序组合框添加额外的排序选项。

add_filter( 'woocommerce_get_catalog_ordering_args', 'custom_woocommerce_get_catalog_ordering_args' );

function custom_woocommerce_get_catalog_ordering_args( $args ) {
    $orderby_value = isset( $_GET['orderby'] ) ? woocommerce_clean( $_GET['orderby'] ) : apply_filters( 'woocommerce_default_catalog_orderby', get_option( 'woocommerce_default_catalog_orderby' ) );

    if ( 'random_list' == $orderby_value ) {
        $args['orderby'] = 'rand';
        $args['order'] = '';
        $args['meta_key'] = '';
    }
    return $args;
}

add_filter( 'woocommerce_default_catalog_orderby_options', 'custom_woocommerce_catalog_orderby' );
add_filter( 'woocommerce_catalog_orderby', 'custom_woocommerce_catalog_orderby' );

function custom_woocommerce_catalog_orderby( $sortby ) {
    $sortby['random_list'] = 'Random';
    return $sortby;
}

为什么使用“_new”自定义字段?您可以只使用添加产品的时间戳来确定产品是否是新产品。