Вызов AJAX с использованием последней переменной, загруженной на страницу, вместо текущей записи - PullRequest
0 голосов
/ 20 января 2012

Я создаю собственный плагин, который запускает Ajax-вызов, когда они делятся публикацией в твиттере, Google + или любят ее в Facebook.

В файле index.php я помещаю это в цикл, чтобы он вызывался при каждом новом сообщении на домашней странице.

<?php cp_social_sharing_4pts(); ?>

Вот часть моей функции PHP:

function cp_social_sharing_4pts(){
if ( is_user_logged_in() ) {
 echo '<script type="text/javascript">
 var postid = '.get_the_ID().';
 function cp_share_twitter_do(){
 jQuery.ajax({dataType: "json", data: {action: "cp_share_twitter_do", post: postid},
  success: function(data){
  if(data.success==true){
  Boxy.alert(data.message);
  thebox.hide();
  thebox.unload();
 } else { Boxy.alert(data.message); }
 }
 });
}
</script>
';
}
 // Show Buttons
 echo 'Post ID: '.get_the_ID().'<br />'; // debug
echo '<a href="https://twitter.com/share" class="twitter-share-button" data-    url="'.get_permalink().'" data-text="'.get_the_title().'" data-count="horizontal" data-     via="ps3blogdotnet">Tweet</a>'; 
}

Тогда это загружается в голову:

function cp_social_sharing_js(){
 if ( is_user_logged_in() ) {
echo '
<script type="text/javascript" src="http://platform.twitter.com/widgets.js"></script>
<script type="text/javascript">
twttr.events.bind(\'tweet\', function(event) { cp_share_twitter_do(); });
</script>
';
 }  
}
add_action('wp_head','cp_social_sharing_js');

После того, как AJAX стреляет, он идет сюда:

    function cp_share_twitter_do(){ // Tweet Entry
            $cp_postID = $_POST['post']; // THIS IS THE ISSUE. It's not returning the correct ID from the post I shared on.
    // Do more functions here
    echo json_encode($r);
    die();
}
add_action('wp_ajax_cp_share_twitter_do', 'cp_share_twitter_do');

Это отлично работает, если в одном посте. Вопрос находится на главной странице.

Переменная postid правильно отображает идентификатор сообщения в каждом сообщении. Но когда вызов ajax завершается, он всегда передает идентификатор последнего сообщения, отображаемого на домашней странице, вместо текущего сообщения.

1 Ответ

0 голосов
/ 20 января 2012

Из того, что я вижу, причина в том, что вы не получаете идентификатор снова после завершения цикла. Так, например, когда вы вызываете cp_share_fb_do(), переменная postid все еще устанавливается как последний идентификатор из цикла while. Вам нужно будет вызвать get_the_ID() или, в качестве альтернативы, сохранить идентификатор в переменной в каждой функции, например,

function cp_share_fb_do(){
  var id = '.get_the_ID().';
  jquery.ajax({ ///etc

только не забудьте убедиться, что вы изменили post: postid на новое имя переменной.

Надеюсь, это поможет

...