Я создаю собственный плагин, который запускает 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 завершается, он всегда передает идентификатор последнего сообщения, отображаемого на домашней странице, вместо текущего сообщения.