这里的总体思路非常简单:更好地了解每个产品的“添加到购物车”按钮获得了多少次点击。为什么?了解产品是否至少令人感兴趣。
顾客是否完成结帐是另一回事,因此是这个“计数”传奇中的“下一步”。
我再次发现了一些零碎的东西——但没有什么真正有效的。我已经成功地在
WooCommerce > Proudcts
中创建了专栏,并且我已经开始理解 JS 部分 - 但无论我做什么,点击次数都不会被计算在内。
我想要和需要的: 每次访问者或登录的客户点击“添加到购物车”按钮(循环、存档、产品页面等)时,该点击都应该被计数。一切都从 0 开始。然后单击 1 = 将 cont 更改为 1。然后再单击 = 将计数器更改为 2 - 依此类推。
这是我正在使用的代码。
第 1 部分:
//删除“添加到购物车”的所有版本并替换它们
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 以及如何使用计数器创建列。但我被困住了。
尝试以下简化代码版本,无需 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 文件中(或插件中)。已测试并有效。