我正在try 统计单个产品页面的浏览量,但我做不到.我将很高兴得到任何帮助来解决我的问题.

add_action('template_redirect', 'update_product_data');
function update_product_data(){
     if (class_exists('WooCommerce') && is_product()) {
        $product = wc_get_product( get_the_ID() );
        $product_id = $product->get_id();
        $count   = (int) $product->get_meta('_click_counter');

        $count++;
        $product->update_meta_data('_click_counter', $count);
        $product->save();
    }
} 

推荐答案

this answer thread为基准,try 以下几种方法:

// Utility function: Updating product views count
function single_product_views_count_update( $product ) {
    if( ! is_a($product, 'WC_Product') ) return;

    $count = (int) $product->get_meta('_views_counter');
    $product->update_meta_data('_views_counter', $count + 1);
    $product->save();
}

// Count single product views
add_action( 'woocommerce_single_product_summary', 'count_single_product_views' );
function count_single_product_views(){
    global $product;
    single_product_views_count_update( $product );
}

代码位于您的子主题的unctions.php文件中(或在插件中).经过测试,效果良好.


现在,如果您希望避免来自同一用户的重复视图数,则应改用以下方法:

// Force non logged users WC Session cookie
add_action( 'woocommerce_init', 'force_non_logged_user_wc_session' );
function force_non_logged_user_wc_session(){ 
    if( is_user_logged_in() || is_admin() )
       return;

    if ( isset(WC()->session) && ! WC()->session->has_session() ) {
       WC()->session->set_customer_session_cookie( true ); 
    }
}

// Utility function: Get user viewed products
function get_user_viewed_products() {
    if ( is_user_logged_in() ) {
        $viewed_products = (array) get_user_meta( get_current_user_id(), 'viewed_products', true);
    } else {
        $viewed_products = (array) WC()->session->get('viewed_products');
    }
    return $viewed_products;
}

// Utility function: Updating user viewed products 
function update_user_viewed_products( $product_id ) {
    if ( is_user_logged_in() ) {
        $user_id    = get_current_user_id();
        $products   = get_user_meta( $user_id, 'viewed_products', true );
        if ( empty($products) ) {
            $products = array();
        }
        $products[] = $product_id;
        update_user_meta( $user_id, 'viewed_products', $products);
    } else {
        $products   = WC()->session->get('viewed_products');
        if ( empty($products) ) {
            $products = array();
        }
        $products[] = $product_id;
        WC()->session->set('viewed_products', $products);
    }
}

// Utility function: Updating product views count
function single_product_views_count_update( $product ) {
    if( ! is_a($product, 'WC_Product') ) return;

    if ( in_array( $product->get_id(), get_user_viewed_products() ) ) {
        return;
    } else {
        update_user_viewed_products( $product->get_id() );
    }

    $count = (int) $product->get_meta('_views_counter');
    $product->update_meta_data('_views_counter', $count + 1 );
    $product->save();
}

// Count single product views
add_action( 'woocommerce_single_product_summary', 'count_single_product_views' );
function count_single_product_views(){
    global $product;
    single_product_views_count_update( $product );
}

Addition By the OP:在管理产品列表中显示产品视图

// Add a custom column to Admin product list
add_filter('manage_edit-product_columns', 'admin_product_views_counter_column');
function admin_product_views_counter_column($columns) {
    $columns['views_count'] = __('View', 'woocommerce');
    return $columns;
}

// Display the views counter for each product in the "View" column  
add_action('manage_product_posts_custom_column', 'admin_product_views_counter_column_content', 10, 2);
function admin_product_views_counter_column_content($column, $post_id) {
    if ($column === 'views_count') {
        global $product;

        echo (int) $product->get_meta('_views_counter');
    }
}

Php相关问答推荐

自定义WooCommerce帐户下载列表

FlySystem v3:使用本地适配器时出现问题

使用ESI的Symfony Sulu清漆

从字符串转换日期和/或时间时,Laravel转换失败

用GUZLE模拟Read_Timeout

如何解决 Laravel 外键错误?

将 PHP 版本更改为 8.1,但 WordPress 认为我们正在使用版本 7.4?

订单完成后创建 WooCommerce 促销代码

WooCommerce 回购自定义插件:如何更新用户钱包?

标签打印机的 CSS

将自定义保存金额移至 Woocommerce 简单产品中的价格以下

无法在 Laravel 中实例化抽象类 ProductAbstract

PHP简单地将物品装在盒子里会导致未使用的空间,但还有剩余容量

Laravel 添加到经过身份验证的用户的数据将应用于每个查询

PHP 中的curl -F request=@file.xml

在这个 Laravel 应用中,如何仅显示已批准的 comments 回复?

Woocommerce API 的 PHP Curl 附加参数

Laravel 从嵌套数组的第二级获取最后一项

如何在 Laravel 中验证多个输入?

如何在运行 update_post_meta 后更新 wp_wc_product_attributes_lookup 表?