2016-09-01 5 views
1

私は、ページが読み込まれるたびにユーザーのメタを更新する簡単なPHPベースのカウンターWordpress関数を持っています。AJAX - ボタンのクリックでPHP関数を実行

私がしたいのは、特定のボタンがクリックされたときにのみこの機能を実行することです。

マイボタンのマークアップ(現在は各ページの読み込み時に、実行され、ユーザーのメタを更新)

<a class="button" id="interaction-count" href="#">Interaction</a> 

私の現在のPHP関数

function setCvDownloads($postID) { 
    $count_key = 'download_count'; 
    $count = get_user_meta($postID, $count_key, true); 
    if($count==''){ 
     $count = 0; 
     delete_user_meta($postID, $count_key); 
     add_user_meta($postID, $count_key, '0'); 
    }else{ 
     $count++; 
     update_user_meta($postID, $count_key, $count); 
    } 
} 

のですがときinteraction-countこれを実行することが可能です代わりにボタンをクリックしますか?私はAJAXが関与していると思いますか?もし誰かが仲良くなったら正しい方向に向いてくれるでしょうか?

+0

正しい以下の記述する必要がある - それはあります'interaction-count'ボタンがクリックされたときにそれを実行することができます。また、yes、ajaxがおそらく最適なオプションになります。 – RamRaider

+0

From '$ myValue'の値... –

+0

また、あなたの関数のどこでも' $ myValue'を使っていないことに注意してください。 –

答えて

0

あなたは同時に動くこともできますが、最善の方法は確かにajaxです。

ので、単純なJS(jqueryのなし)のコードは、次のようになります。

<input type="button" ... onclick="CallPhpFunction()" /> 
.... 
<script> 
function CallPhpFunction() { 
    var xhttp=new XMLHttpRequest(); 
    xhttp.open('POST', 'phpscript.php', true); 
    xhttp.send('data=somedata&otherData=someotherdata'); 
} 
</script> 

の例では、私はまた、あなたがsendメソッドに渡すPHPスクリプトにデータを送ることができる方法を示してきました。それは$ _POSTを使ってPHPスクリプトで使うことができます。

1

Ajaxを使用することが最善の選択肢です。

<a class="button" id="interaction-count" href="#" onclick="setCvDownloads(<?php echo $post->ID);">Interaction</a> 

投稿IDを関数に渡す必要があるため、この関数で投稿IDを渡す必要があります。

アヤックス:

ファイル・パスは、Ajaxの構文または他のトンのURLに正しい動作しませんことを確認してください。

function setCvDownloads(a) 
{ 
    $.ajax({ 
     type: "POST", 
     url: "/savedata.php", 
     data: "&post_id="+a, 
     success:function(html) 
     { 
     // here you can provide if you need success notifications or as per your wish. 
     } 
    }); 
} 

savedata.php

<?php 
include('../../wp-config.php'); // Ensure that your wp-config file is connected here correctly. 
$post_ID = $_POST['post_id']; // Getting the posted POST ID over ajax here. 
$count_key = 'download_count'; 
    $count = get_user_meta($post_ID, $count_key, true); 
    if($count==''){ 
     $count = 0; 
     delete_user_meta($post_ID, $count_key); 
     add_user_meta($post_ID, $count_key, '0'); 
    }else{ 
     $count++; 
     update_user_meta($post_ID, $count_key, $count); 
    } 
?> 
+0

私が現在持っている 'setCvDownloads'関数はPHP関数なのでJSで動かないと思いますか?@DeanElliott。 –

+0

私はそれを編集して私の答えにAjaxコードを追加しました。確認し、私に知らせてください。 :) –

1

のjQueryを使用しました。このjQueryコードはそれを行う必要がありますが、リクエストをキャプチャするにはPHPファイルが必要です。これを行うための

$("#interaction-count").on("click", function(){ 
    $.ajax({ 
     type: "POST", 
     url: "/somephpfile.php", 
     data: {}, 
     success: success, 
     dataType: dataType 
    }); 
}); 
0

あなたは、ワードプレスのループ内

<a class="button" id="interaction-count" href="#" 
onclick="increaseMyCount('<?php the_ID();?>')">Interaction</a> 

<script type="text/javascript"> 
function increaseMyCount(numb_data) 
{ 
jQuery.ajax({ 
method: "POST", 
url: "<?php bloginfo('url');?>/wp-admin/admin-ajax.php", 
data: { postid: numb_data, action: 'setcvdownloads' } 
}) 
.done(function(msg) { 
alert("Data Saved: " + msg); 
}); 
} 
</script> 

を次のコードを追加する必要があり、テーマファイルののfunctions.phpに、あなたは、コード

<?php 
function setCvDownloads() { 
    $count_key = 'download_count'; 
    $postID=$_POST['postid']; 
    $count = get_user_meta($postID, $count_key, true); 
    if($count==''){ 
    $count = 0; 
    //delete_user_meta($postID, $count_key); 
    add_user_meta($postID, $count_key, '0'); 
    }else{ 
     $count++; 
     update_user_meta($postID, $count_key, $count); 
    } 
    echo "Saved"; 
    wp_die(); 
} 
add_action('wp_ajax_setcvdownloads', 'setCvDownloads'); 
add_action('wp_ajax_nopriv_setcvdownloads', 'setCvDownloads'); 
?> 
関連する問題