Php 将电子商务产品查询更改为随机排序

Php 将电子商务产品查询更改为随机排序,php,mysql,wordpress,woocommerce,hook-woocommerce,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”的产品始终出现在查

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

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

    ...do something here...
}
但我如何:

1.查询时对所有产品进行随机排序

2.将随机分拣的产品按顺序保存30天,30天期满后再次更换

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


提前感谢您的帮助

您可以在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;
}

为什么要使用“\u new”自定义字段?您可能只需要使用添加产品时的时间戳来确定产品是否为新产品。

尝试使用此$q->set('orderby','rand')修改您的查询;对不起,没有经过测试。您可能需要在Cron作业中运行它,并将id作为数组存储在数据库中