【问题标题】:Count how many times a user clicked to a button in WordPress计算用户点击 WordPress 中某个按钮的次数
【发布时间】:2020-08-18 13:30:04
【问题描述】:

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

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

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

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

您有更好的解决方案而不是创建一个新表吗? 顺便说一句:这是一个 WordPress 网站。

【问题讨论】:

  • 您是否想做类似的事情:wordpress.org/extend/plugins/wp-click-track
  • 我不想使用插件 :-) 但是谢谢!我想这样做。
  • 但是您说您希望每个用户都获得该计数,是这样吗?
  • 不,我的 wordpress 前端没有用户,只有不可见的客人 :-) 我只需要跟踪下载次数。只是总和:-)
  • 我认为这种方式是安全的。但如果这些按钮可以与帖子链接,我可以用另一种方式来做到这一点。例如,您在帖子中有一个分享按钮,并且您想知道该帖子被分享了多少。如果是这样,您可以在现有的 WordPress 表中保存额外的数据。

标签: php mysql wordpress wordpress-theming


【解决方案1】:

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

首先,在您的主题脚本中包含以下内容,我假设您有本地主题脚本或插件 js 文件。你必须localize your script for using ajax in the "WP Way"

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')

【讨论】:

    【解决方案2】:

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

    【讨论】:

    • 我可以不用任何插件也能做到这一点吗? :-)
    • 是的,如果没有插件,您可以编写为每个可下载文件添加自定义字段并通过 JavaScript 和 AJAX 更新计数的功能。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-29
    • 1970-01-01
    • 2020-05-30
    • 1970-01-01
    • 2020-05-16
    相关资源
    最近更新 更多