Сортировка продуктов Woocommerce по наиболее просматриваемым с использованием счетчика просмотров - PullRequest
1 голос
/ 16 июня 2019

Любые идеи будут высоко оценены.

Я пытаюсь изменить порядок своих продуктов woocommerce, используя большинство из них с помощью плагина post-views-counter .

Придерживался этих примеров, которые, похоже, не работали Сортировка товаров по наиболее просматриваемым

function my_view_filter($query){
  if ($query->is_main_query() && ( $query->is_home() || $query- >is_archive() 
   )
     ) {
     $query->set('post_type', 'product');
     $query->set('suppress_filters', false);
     $query->set('orderby', 'post_views');
     $query->set('order', 'asc');
     $query->set('fields', '');
     }
   }
add_action( 'pre_get_posts', 'my_view_filter' );

Ответы [ 2 ]

4 голосов
/ 16 июня 2019

Прежде всего, плагин, который вы пытаетесь использовать, устарел. Во-вторых, создается впечатление, что создается таблица для хранения представлений, и для этого потребуется изменить фактический запрос MySQL для получения записей, упорядоченных по дате, что требует много работы для поиска того, что вам нужно сделать.

Вы можете просто сохранить просмотры при посещении, чтобы опубликовать мета, и использовать их для заказа товаров в каталоге следующим образом:

/**
 * Setting post count on each visit
 *
 */
add_action( 'woocommerce_before_single_product', 'prefix_save_product_views' );
function prefix_save_product_views(  ) {

    $product_id = get_the_ID();
    $increment = 1;
    $current_visit_count = get_post_meta( $product_id, 'product_visit_count', true );

    $total_visit_count = (int)$current_visit_count + $increment;
    update_post_meta( $product_id, 'product_visit_count', $total_visit_count );

}

/**
 * Change the display order based on visit count only in Catalog
 *
 */
add_filter('woocommerce_get_catalog_ordering_args', 'prefix_woocommerce_catalog_orderby');
function prefix_woocommerce_catalog_orderby( $args ) {
    $args['meta_key'] = 'product_visit_count';
    $args['orderby'] = 'meta_value_num';
    $args['order'] = 'desc';
    return $args;
}

Вы столкнулись бы с несколькими проблемами, используя pre_get_posts

0 голосов
/ 17 июня 2019
// Remove product category/tag meta from its original position
remove_action( 'woocommerce_single_product_summary', 'woocommerce_template_single_meta', 40 );
// Add product meta in new position
add_action( 'woocommerce_single_product_summary', 'woocommerce_template_single_meta', 5 );
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...