这里的总体思路非常简单:更好地了解每个产品的"添加到购物车"按钮获得的点击量(S).为什么?以了解该产品是否至少令人感兴趣.

顾客是否完成 checkout 是另一回事,因此,这一"计数"传奇中的"下一步"是另一回事.

再一次,我在这里和那里找到了零星的东西--但没有一件是真正起作用的.我已经成功地在WooCommerce > Proudcts中创建了这个专栏,并且我已经开始理解JS部分的内容--但无论我做什么,点击次数都不会被计算在内.

我想要和需要的: 每次访问者或登录的客户点击"添加到购物车"按钮(循环、档案、产品页面等)时,该点击都应该被计算在内.一切都从0开始.然后1次点击=将CONT变为1.然后再次点击=将计数器变为2-以此类推.

这是我正在使用的代码.

Part 1:

// remove all versions of the "Add To Cart" and replace them
remove_action(' woocommerce_simple_add_to_cart', 'woocommerce_simple_add_to_cart', 30 );

add_action('woocommerce_simple_add_to_cart', 'count_add_to_cart_with_clicks', 1);
function count_add_to_cart_with_clicks() {

    // add our own version
    add_action( 'woocommerce_simple_add_to_cart', 'count_simple_add_to_cart_with_clicks', 30 );
}

function count_simple_add_to_cart_with_clicks() {

    global $product;

        if ( ! $product->add_to_cart_url() ) return;

            echo '<p><a href="' . $product->add_to_cart_url() . '" class="single_add_to_cart_button button alt countable" 
            data-pid="' . $product->get_id() . '">' . $product->single_add_to_cart_text() . '</a></p>';

        // js that should count each click and show the number in wp-admin under WoooCommerce > Products
        wc_enqueue_js( "
            $( 'a.countable' ).click( function( e ) {
            e.preventDefault();
            $.post( '" . '/wp-admin/admin-ajax.php' . "', { action: 'increment_counter', pid: $( this ).data( 'pid' ) } );
            window.open($ ( this ).attr( 'href' ) );
            }
        );
    ");
}

Part 2:

add_action( 'wp_ajax_increment_counter', 'count_increment_counter' );
add_action( 'wp_ajax_nopriv_increment_counter', 'count_increment_counter' );
function count_increment_counter() {

    $pid = $_POST['pid'];

    $click = get_post_meta( $pid, '_click_counter', true ) ? (int) get_post_meta( $pid, '_click_counter', true ) + 1 : 1; update_post_meta( $pid, '_click_counter', $click );

    wp_die();
}

Part 3:

add_filter( 'manage_edit-product_columns', 'count_clicks_in_admin_products_column', 9999);
function count_clicks_in_admin_products_column( $columns ) {

    $columns['click'] = 'click';
    
    return $columns;
}

Part 4:

add_action( 'manage_product_posts_custom_column', 'click_admin_products_views_column_content', 9999, 2 );
function click_admin_products_views_column_content( $column, $product_id ) {

    if ( $column == 'click' ) {

            echo get_post_meta( $product_id, '_click_counter', true );
    }
}

研究了Java脚本和如何使用计数器创建列.但我被困住了.

推荐答案

try 下面这个简化的代码版本(不带JavaScript,不替换Add to Cart核心代码),它将计算所有的Add_to_Cart点击次数,甚至包括AJAX的Add to Cart点击次数:

// Utility function: Updating the click count
function update_add_to_cart_click_counter( $product_id ) {
    $product = wc_get_product($product_id);
    $count   = (int) $product->get_meta('_click_counter');

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

// Count clicks on add to cart action (works with ajax add to cart too)
add_action( 'woocommerce_add_to_cart', 'count_add_to_cart_clicks', 90, 4 );
function count_add_to_cart_clicks( $cart_item_key, $product_id, $quantity, $variation_id = null ) {
    if( did_action('woocommerce_add_to_cart') === 1 ) {
        update_add_to_cart_click_counter( $product_id );

        // Handling variation click count (optional)
        if( $variation_id > 0 ) {
            update_add_to_cart_click_counter( $variation_id );
        }
    }
}

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

// Display the click count for each product in the "Click" column
add_action('manage_product_posts_custom_column', 'admin_product_click_count_column_content', 10, 2);
function admin_product_click_count_column_content($column, $post_id) {
    if ($column === 'click_counter') {
        global $product;

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

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

Php相关问答推荐

419注册期间Laravel 11中的错误

如何使用URL链接(mdl)切换选项卡

在Laravel中,如果我用session—put()存储一些信息,客户端浏览器是否可以使用这些信息?>

我如何知道BaseController中当前运行的是哪个控制器?

WooCommerce数量减号和加号图标未显示

Mod_重写子目录中相应的php文件

不包括WooCommerce中单独销售的产品

将下拉 Select 的值从WooCommerce后端保存并显示到前端

Symfony 6.2 IsGraned具有多个角色

根据WooCommerce中的客户计费国家/地区更改产品价格

我有一个显示记录的表格,每行在最右边有两个按钮.如何才能以正确的顺序获得表的值?

可以';exec、system和shell_exec PHP函数中的命令字符串上的字符数不得超过8175

woocommerce_available_ payment_gateways 过滤器挂钩多次触发

启用 WooCommerce 我的帐户付款方式,允许客户添加付款方式

调用未定义的方法 mysqli::execute_query()

按数字然后按字符串对关联 PHP 数组进行排序

如何在光速网络服务器中使用 apache ..htaccess

Docker: unixodbc.h 没有这样的文件或目录.已安装 unixodbc-dev 时出现pecl install sqlsrv错误

如果 static:: 被解析为B,为什么 PHP 会执行A的方法

使用 splat 运算符时按引用传递 (...)