WordPress按IP地址统计链接点击量

时间:2015-02-24 作者:gundra

我正在建立wordpress网站,它可以选择从特定的自定义帖子类型下载zip文件。通过单击下载按钮,用户自动开始下载zip文件。

<a id="countable_link" href="#">download</a>
我的目标是在同一个按钮旁边显示下载次数。到目前为止,一切都很好,除了我能够无限次触发计数器。

相反,我希望计数器只能由唯一用户执行一次。我假设这与用户的ip地址有关,但我对PHP、SQL和ajax的知识非常贫乏。

这是我找到的脚本:(它也已经发布了here)

<?php

if ( is_admin() ) add_action( \'wp_ajax_nopriv_link_click_counter\',  \'link_click_counter\' );
function link_click_counter() {

    if ( isset( $_POST[\'nonce\'] ) &&  isset( $_POST[\'post_id\'] ) && wp_verify_nonce( $_POST[\'nonce\'], \'link_click_counter_\' . $_POST[\'post_id\'] ) ) {
      $count = get_post_meta( $_POST[\'post_id\'], \'link_click_counter\', true );
      update_post_meta( $_POST[\'post_id\'], \'link_click_counter\', ( $count === \'\' ? 1 : $count + 1 ) );
     }
     exit();
}


add_action( \'wp_head\', \'link_click_head\' );
function link_click_head() {
    global $post;

    if( isset( $post->ID ) ) {
    ?>
   <script type="text/javascript" >
   jQuery(function ($) {
      var ajax_options = {
        action: \'link_click_counter\',
        nonce: \'<?php echo wp_create_nonce( \'link_click_counter_\' . $post->ID ); ?>\',
        ajaxurl: \'<?php echo admin_url( \'admin-ajax.php\' ); ?>\',
        post_id: \'<?php echo $post->ID; ?>\'
      };

     $( \'#countable_link\' ).on( \'click \', function() {
        var self = $( this );
        $.post( ajax_options.ajaxurl, ajax_options, function() {
           window.location.href = self.attr( "href" );
       });
       return false;
    });
});
</script>
<?php
    }
}
?>
当我将此代码片段放入函数时。php文件,它会生成具有精确点击次数的自定义字段值。如果这些数字更现实一些,那就太好了。例如,如果它显示的值为350,人们真的想知道有350个不同的用户下载了内容。

除了使用其他插件之外,我非常感谢任何解决方案。如果能以某种方式整合到这个片段中,它最终将成为我的完美选择。

谢谢

1 个回复
SO网友:kaiser

如果用户使用代理并随机化其IP地址,您会怎么做?有许多浏览器插件可以简化这一过程,只需点击一个按钮即可多次下载。饼干也是如此。除此之外,您还试图收集能够识别用户的数据,这在许多国家是非法的。

更好的方法是添加一个一次性散列,作为post元数据。发布帖子期间添加此类哈希的示例—在本例中,md5将帖子日期哈希为UNIX时间戳:

add_action( \'draft_to_publish\', function( \\WP_Post $post )
{
    add_post_meta( 
        $post->ID, 
        \'download_hash\', 
        md5( date( \'U\', $post->post_date ), 
        true 
    );
} );
(您可以任意构造哈希)。

然后,当用户下载文件时,只需设置一个用户元值,将该哈希作为键,值为1/true/foo. 下载后,您只需检查当前download_hash 已经是用户元值,然后可以拒绝下载。

要实现计数器,只需添加另一个名为download_users 您可以在其中保存一组用户ID。完成。

结束

相关推荐

在Auth.php中显示自定义帖子类型

我正在试图修改我的作者。php页面,以便它包含作者添加的自定义帖子类型。下面是我拥有的内容,它首先显示普通帖子,然后显示自定义帖子类型(my\\u custom\\u post\\u type)。第一部分似乎工作正常,显示正确。然而,第二部分似乎显示了所有自定义的帖子类型,而不仅仅是那些与作者的作者相关的帖子类型。php页面。任何帮助都将不胜感激。非常感谢。<!-- Show normal posts from the author --> <?php if ( have_pos