По сути, у меня есть рабочий код в функциях, который отображает продукты случайным образом для назначенной категории.Проблема в том, что при отображении продуктов, если они имеют нумерацию страниц, на странице 2/3 / ... появляются повторения продуктов. Я пытаюсь предотвратить это.
Я пытался внедрить мой рабочий кодот плагина, который делает именно это, но не для конкретной категории.
Так что я пытаюсь рандомизировать порядок продуктов для конкретной категории.Это код, который делает это (но с повторением на странице 2/3 /...)
function custom_catalog_ordering_args_8( $args ) {
$product_category = 'best-sellers';
if( ! is_product_category($product_category) ) return $args;
// Set default ordering to 'date ID', so "Newness"
$args['orderby'] = 'rand';
if( $args['orderby'] == 'date ID' )
$args['order'] = 'DESC'; // Set order by DESC
return $args;
}
add_filter( 'woocommerce_get_catalog_ordering_args', 'custom_catalog_ordering_args_8', 20, 1 );
Теперь ниже приведен код из плагина, который предотвращает повторение продуктов, создавая переходный срок жизни одногоhour `
//add "Random" setting to product sorting menu
function do2_addRandomProductOrderSetting($sortby){
$sortby['random_order'] = 'Random';
return $sortby;
}
add_filter('woocommerce_default_catalog_orderby_options','do2_addRandomProductOrderSetting');
add_filter('woocommerce_catalog_orderby','do2_addRandomProductOrderSetting');
//randomize products when setting is used
function do2_randomizeProductWhenSet($args){
$orderbySetting = isset($_GET['orderby']) ? wc_clean($_GET['orderby']) : apply_filters('woocommerce_default_catalog_orderby', get_option('woocommerce_default_catalog_orderby'));
if('random_order' == $orderbySetting){
if(false===($seed = get_transient('do2_randSeed'))){
$seed = rand();
set_transient('do2_randSeed', $seed, 3600 );
}
$args['orderby'] = 'RAND('.$seed.')';
$args['order'] = '';
$args['meta_key'] = '';
}
return $args;
}
add_filter('woocommerce_get_catalog_ordering_args','do2_randomizeProductWhenSet');
}
} else {
if(!function_exists('do2_WooCommerceAdminNotice')){
//warn on missing WooCommerce
function do2_WooCommerceAdminNotice() {
?>
<div class="notice error is-dismissible" >
<p><?php _e('Your site must be running WooCommerce to benefit from the WooCommerce Random Product Sorting with Pagination plugin.'); ?></p>
</div>
<?php
}
add_action('admin_notices', 'do2_WooCommerceAdminNotice');
}
И ниже приведена его реализация, которую я пытался сделать, чтобы она работала для определенной категории, в данном случае« бестселлеров », но она не работает вообще
function do2_randomizeProductWhenSet($args){
$product_category = 'best-sellers';
if( ! is_product_category($product_category) ) return $args;
$orderbySetting = isset($_GET['orderby']) ? wc_clean($_GET['orderby']) :
apply_filters('woocommerce_default_catalog_orderby',
get_option('woocommerce_default_catalog_orderby'));
if( ! is_product_category($product_category) == $orderbySetting){
if(false===($seed = get_transient('do2_randSeed'))){
$seed = rand();
set_transient('do2_randSeed', $seed, 3600 );
}
$args['orderby'] = 'RAND('.$seed.')';
if( $args['orderby'] == 'date ID' )
$args['order'] = 'DESC'; // Set order by DESC
}
return $args;
}
add_filter('woocommerce_get_catalog_ordering_args','do2_randomizeProductWhenSet');
Кто-нибудь, пожалуйста ??Очень ценится!