计算“添加到购物车”的点击次数并将其显示在 WooCommerce 管理产品列表中

问题描述 投票:0回答:1

这里的总体思路非常简单:更好地了解每个产品的“添加到购物车”按钮获得了多少次点击。为什么?了解产品是否至少令人感兴趣。

顾客是否完成结帐是另一回事,因此是这个“计数”传奇中的“下一步”。

我再次发现了一些零碎的东西——但没有什么真正有效的。我已经成功地在

WooCommerce > Proudcts
中创建了专栏,并且我已经开始理解 JS 部分 - 但无论我做什么,点击次数都不会被计算在内。

我想要和需要的: 每次访问者或登录的客户点击“添加到购物车”按钮(循环、存档、产品页面等)时,该点击都应该被计数。一切都从 0 开始。然后单击 1 = 将 cont 更改为 1。然后再单击 = 将计数器更改为 2 - 依此类推。

这是我正在使用的代码。

第 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' ) );
            }
        );
    ");
}

第 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();
}

第三部分:

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

第 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 );
    }
}

研究了 JavaScript 以及如何使用计数器创建列。但我被困住了。

php jquery wordpress woocommerce counter
1个回答
0
投票

尝试以下简化代码版本,无需 JavaScript,它将计算所有 add_to_cart 点击次数,甚至 Ajax 添加到购物车点击次数:

// 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');
    }
}

代码位于子主题的functions.php 文件中(或插件中)。已测试并有效。

© www.soinside.com 2019 - 2024. All rights reserved.