0

wordpressのプラグインを作りながらphpとAjaxを勉強していて、なんとか完成させました。サイト上のすべてのバナーのクリック数とインプレッション数をカウントします。そのプラグインなどを介してバナーを配置します... とにかく、各バナーが取得するインプレッション数の追加が完了しました。問題なく動作します。しかし、チュートリアルではなく自分でこれを行ったので、これが正しい方法なのか疑問に思っています。

$(window).load(function() {

    $("a[count]").each(function(){
        var id = $(this).attr("count");
        var data = {
            action: 'impressions_count',
            postid: id
        };
        $.post(MyAjax.ajaxurl, 
            data,
            function(response) {
                console.log( response);
        });
    })
});

これはDBを更新するコードの一部です

function impressions_count_callback() {
        global $wpdb;
        $post_id = $_POST['postid'];
        //print_r($post_id);
        $post_id = mysql_real_escape_string($post_id);
        $wpdb->query("UPDATE ". $wpdb->prefix ."cb_ads_manager SET impressions = impressions+1 WHERE ID = '$post_id'");
    }

ご覧のとおり、サイト上のバナーごとに ajax リクエストを送信しているため、バナーが 5 つある場合は 5 つのリクエストになります。1回のリクエストですべてを送信しても違いはありますか?それでも、dbクエリでforeachループを実行する必要があるため、一度に実行できない限り、5つのdbクエリを再度実行します。

PS私がWP内で作業している場合でも、これはphp/ajaxの質問だと思います。それが私がここで尋ねた理由です。

4

1 に答える 1

1

実際には、次のようなものを使用して、1 つの ajax リクエストと DB への 1 つのクエリのみを作成できます。

$(window).load(function() {
    var ids = new Array();
    $("a[count]").each(function(){
        ids.push($(this).attr("count"));
    };
    if(ids.length > 0) {
       var data = {
          action: 'impressions_count',
          postids: JSON.stringify(ids);
       };
       $.post(MyAjax.ajaxurl, data,
           function(response) {
             console.log( response);
       });
    }

 }); 

そしてPHPで

function impressions_count_callback() {
        global $wpdb;
        $post_id = json_decode($_POST['postid']);
        //print_r($post_id);
        $post_id = implode(',', $post_id);
        $post_id = mysql_real_escape_string($post_id);
        $wpdb->query("UPDATE ". $wpdb->prefix ."cb_ads_manager SET impressions = impressions+1 WHERE ID IN ($post_id)");
}
于 2013-05-04T16:19:39.963 に答える