1

Wordpress ブログの投票システムを作成しようとしていますが、作成したコードは投票用に作成されたメタデータ フィールドを更新せず、関数を呼び出して投票を追加するたびに値 1 が返されます。

ここに私が書いたコードがあります:

投稿の最初の html 部分で、javascript 経由でloadurl()を呼び出すリンクを作成しました。

<a  onclick="loadurl()" class='voteup' title="به این پست یه امتیاز"><i class="icon-angle-up"></i></a>

loadurl()呼び出しのスクリプトは以下のとおりで、ajax を使用してfunctions.phpファイルからcall_me()関数を呼び出します。

function loadurl() {
var ajaxurl = '<?php echo admin_url('admin-ajax.php'); ?>';
    var value = $.ajax({

      type: "POST",
      url: ajaxurl,
      data:{
            //the call_me function for adding a vote in the functions.php
        action: 'call_me'
        }
    })
     .fail(function(r,status,jqXHR) {
         console.log('failed');
     })
     .done(function(r,status,jqXHR) {

          console.log('success');
          //r is the return value of the function call_me();
          console.log(r);
    });
}

最後に、functions.phpファイルにアクション フック (これについてはよくわかりません) と、現在の投票を取得する関数本体を追加し、現在の投票に 1 を追加した後、新しい投票として更新します。カウント:

<?php  
   add_action('wp_ajax_noPriv_call_me', 'call_me');
   add_action('wp_ajax_call_me', 'call_me');
   add_action('save_post', 'call_me');

   function call_me() { 
      global $wpdb;
      $currentvotes = get_post_meta($_POST['post'], 'votes', true);
      $currentvotes = $currentvotes + 1;
      update_post_meta($_POST['post'], 'votes', $currentvotes);
      echo $currentvotes;   
      die();
   }
?>

しかし、loadurl() 関数の console.log(r) 関数から出力される currentvotes 値は常に 1 です。

4

1 に答える 1

3

問題は、postID をcallme()関数に渡していなかったことと、functions.php の php 関数内に入ると、何らかの理由で postID を取得できなかったことです。そこで、postID を格納するid変数を追加しました。

var id= <?php the_ID();?>;

次に、ajax 呼び出しに以下を追加して callme() 関数に渡します。

'id': id,

したがって、ajax 呼び出しは次のようになります。

function loadurl() {

var ajaxurl = '<?php echo admin_url('admin-ajax.php'); ?>';
var id= <?php the_ID();?>;
var value = $.ajax({

    type: "POST",
    url: ajaxurl,
    data:{
        'id': id,
        action: 'call_me'

        }

    })
     .fail(function(r,status,jqXHR) {
         console.log('failed');

     })
     .done(function(r,status,jqXHR) {
        /*console.log('success');*/
        console.log(r);

     });

}

これ$id= $_REQUEST['id'];で、Ajax 呼び出しが行われた postID を取得でき、次の関数を使用して、投稿用に保存された対応するメタデータから投票値を読み取り、それを ajax 呼び出しに返すことができます。

<?php  
add_action('wp_ajax_nopriv_call_me', 'call_me');
add_action('wp_ajax_call_me', 'call_me');


function call_me(){ 
 $id= $_REQUEST['id'];

    $currentvotes = get_post_meta($id, 'votes', true);
    $currentvotes = $currentvotes + 1;
    update_post_meta($id, 'votes', $currentvotes);

echo $currentvotes ;
die();
}
?>
于 2013-09-12T13:21:58.017 に答える