web-dev-qa-db-ja.com

ワードプレスのカウントリンクのIPアドレスによるクリック数

Wordpress Webサイトを構築しています。このサイトには、特定のカスタム投稿タイプからZipファイルをダウンロードするオプションがあります。ダウンロードボタンをクリックすることにより、ユーザーは自動的にZipファイルのダウンロードを開始します。

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

私の目標は、ダウンロード数をまったく同じボタンの横に表示することです。これまでのところ、私は無限のカウンター回数をトリガーすることができるという事実を除いて、すべてがうまく機能しています。

それの代わりに、私はそのカウンタが唯一のユーザによって一度だけ実行されることができることを望みます。私はこれがユーザーのIPアドレスで何かをする必要があると仮定しています、しかし私のPHP、SQLおよびAjaxの知識は非常に貧弱です。

これが私が見つけたスクリプトです:(それはまたここに投稿されています)

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

このスニペットをfunctions.phpファイルに追加すると、正確なクリック数でカスタムフィールド値が生成されます。これらの数字がもっと現実的であれば素晴らしいでしょう。たとえば、350の値が表示されている場合、350人のユーザーがコンテンツをダウンロードしたことを知りたいと思います。

私は追加のプラグインを使うこと以外の解決策に感謝しています。どういうわけかこのスニペットに組み込むことができれば、それはちょうど私にとって完璧な円になるでしょう。

ありがとう、

1
gundra

ユーザーがプロキシを使用して自分のIPアドレスをランダム化したらどうしますか。ボタンをクリックして複数回ダウンロードすることを簡単にするための多数のブラウザプラグインがあります。クッキーについても同じことが言えます。それ以外に、あなたはユーザーを識別することを可能にするデータを集めることを試みています、それは多くの国で違法です。

はるかに優れた(可能性が高い)ものは、投稿メタデータとして追加する使い捨てハッシュです。投稿の公開中にこのようなハッシュを追加する例 - この場合、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がすでにユーザーメタ値であるかどうかを確認してからダウンロードを拒否できます。

カウンターを実装するには、単にユーザーIDの配列を保存するdownload_usersという名前の別の添付ファイルのメタ値を追加します。完了しました。

1
kaiser