按 WooCommerce 中查看次数最多的方式对所有产品进行排序和显示

Sort and display all products by most viewed in WooCommerce

受线程 Sort Woocommerce products by most viewed using Post View Counter 的启发,下面是我的代码,它更改了产品排序选项以显示查看次数最多的产品:

    /**
 * 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;
}

但是它不显示所有其他没有任何页面浏览量的产品。

有没有一种方法可以按页面浏览量排序并同时显示其他产品(还没有页面浏览量)。

有什么想法吗?

为此,所有其他产品(尚未查看)应该需要具有 product_visit_count 元键 元值为 0.

您可以通过添加这个简单的函数来做到这一点,您将 运行 一次 (始终进行数据库备份):

// Function that set "product_visit_count" metakey with a zero value on non visited products
function set_zero_product_visit_count_on_not_visited_products() {
    // Only for admin user role
    if( ! current_user_can('edit_products')) return;

    // Get all products that doesn't have "product_visit_count" as metakey (not visited)
    $product_ids = wc_get_products( array(
        'limit'         => -1,
        'return'        => 'ids',
        'meta_key'      => 'product_visit_count',
        'meta_compare'  => 'NOT EXISTS',
    ) );
    
    // Loop through product ids
    foreach( $product_ids as $product_id ) {
        // Add 'product_visit_count' meta key with a value of 0 (zero)
        update_post_meta( $product_id, 'product_visit_count', 0 );
    }
}

// Triggers the function
set_zero_product_visit_count_on_not_visited_products();

代码进入您的活动子主题(或活动主题)的 functions.php 文件。

保存后,以管理员用户身份,浏览您网站的任意页面,执行该功能。 现在您可以删除它 (删除它)。已测试并有效。


现在对于即将推出的新产品,当您添加新产品时,以下脚本将添加 product_visit_count 元键0 的值:

add_action( 'woocommerce_admin_process_product_object', 'init_product_visit_count_on_new_prodct' );
function init_product_visit_count_on_new_prodct( $product ) {
    // Get 'product_visit_count' meta value
    $meta_value = $product->get_meta( 'product_visit_count' );
    
    // If meta value doesn't exist
    if ( empty($meta_value) ) {
        // Set the 'product_visit_count' to zero
        $product->update_meta_data( 'product_visit_count', 0 );
    }
}

代码进入您的活动子主题(或活动主题)的 functions.php 文件。应该可以。