计算用户点击 WordPress 中的按钮的次数

Count how many times a user clicked to a button in WordPress

我需要统计用户点击特定按钮的次数,例如:

<a id="download" href="#">Download</a>

此处的最佳做法是什么?我考虑创建一个全新的数据库 table 并在每次用户单击按钮时增加值。

function countClicks() {
 global $wpdb;
 $charset_collate = $wpdb->get_charset_collate();
 require_once( ABSPATH . 'wp-admin/includes/upgrade.php' );

 //* Create the teams table
 $table_name = $wpdb->prefix . 'count_clicks';
 $sql = "CREATE TABLE $table_name (
 click_id INTEGER NOT NULL AUTO_INCREMENT,
 click_number INTEGER NOT NULL,
 PRIMARY KEY (click_id)
 ) $charset_collate;";
 dbDelta( $sql );
}

除了创建一个全新的 table,您有更好的解决方案吗? 顺便说一句:这是一个 WordPress 网站。

我会使用 Advanced Custom Fields 插件并为每个可下载文件创建一个自定义字段 - 然后使用 JavaScript 捕获点击,该点击通过 AJAX 发送一个调用来增加计数。

增加一个计数器并拥有它而不创建新的 table。您应该使用选项 API。这是核心更新安全。

首先,在您的主题脚本中包含以下内容,我假设您有本地主题脚本或插件 js 文件。你必须

jQuery(document).ready(function($){
    $('a#download').click(function(e){
        e.preventDefault();
        $.ajax({
            url: myajax.ajaxurl,
            data: {
                action: 'increment_counter',
            },
            type: 'POST',
        })
        .done(function(){
            // go to the link they clicked
            window.location = $(this).attr('href');
        })
        .fail(function(xhr){
            console.log(xhr);
        })
    });
});

然后将以下内容添加到您的 functions.php 或您的插件中。

add_action('wp_ajax_increment_counter', 'my_increment_counter');   
add_action('wp_ajax_nopriv_increment_counter', 'my_increment_counter');

function my_increment_counter(){
    // Name of the option
    $option_name = 'my_click_counter';
    // Check if the option is set already
    if ( get_option( $option_name ) !== false ) {
        $new_value = intval(get_option($option_name)) + 1; 
        // The option already exists, so update it.
        update_option( $option_name, $new_value );
    } else {
        // The option hasn't been created yet, so add it with $autoload set to 'no'.
        $deprecated = null;
        $autoload = 'no';
        add_option( $option_name, 1 , $deprecated, $autoload );
    }
}

所以每当你需要获取值而不递增它时,只需使用

get_option('my_click_counter')