Ajax в WP подсчет просмотров страниц при кэшировании
Перейти к навигации
Перейти к поиску
Простой пример использования Ajax в WordPress на примере подсчета числа просмотров страниц (pages) и записей (posts).
Добавляем код в functions.php темы:
//На это не обращаем внимания, к вопросу ajax не относится, но требуется для подсчета страниц и постов,
// уже было реализованно в используемой мной теме
/* Подсчет просмотров страниц и постов */
function getPostViews($postID){
$count_key = 'post_views_count';
$count = get_post_meta($postID, $count_key, true);
if($count==){
delete_post_meta($postID, $count_key);
add_post_meta($postID, $count_key, '0');
return "0 ";
}
return $count;
}
function setPostViews($postID) {
$count_key = 'post_views_count';
$count = get_post_meta($postID, $count_key, true);
if($count==){
$count = 0;
delete_post_meta($postID, $count_key);
add_post_meta($postID, $count_key, '0');
}else{
$count++;
update_post_meta($postID, $count_key, $count);
}
}
//вот до сюда
/* Подсчет просмотров страниц и постов с включенным плагином кэширования */
//используется скрипт /js/post_view_set.min.js, зарегистрируем его
function register_post_view_set() {
//Регистрация скрипта
wp_register_script(
'post-view-set', //имя скрипта
get_template_directory_uri() . '/js/post_view_set.min.js', //url скрипта
array('jquery'), //От каких скриптов зависит скрипт
, //Версия скрипта
true //В footer
);
//подключени скрипта
wp_enqueue_script('post-view-set');
//Передача переменной admin_url пути admin-ajax.php через объект
//rrv_postViewSet (имя придумываем уникальное)
wp_localize_script('post-view-set', 'rrv_postViewSet',
array(
'url' => admin_url('admin-ajax.php'),
//придумываем уникальную "соль" например 'Тут может-Быть произвольный_текст'
'nonce' => wp_create_nonce('Тут может-Быть произвольный_текст')
)
);
}
add_action('wp_enqueue_scripts', 'register_post_view_set');
//добваляем ajax экшен
add_action('wp_ajax_nopriv_rrv_post_view_set', 'rrv_action_post_view_set'); //для не зарегистрированных, ключевым является начало wp_ajax_nopriv_
//add_action('wp_ajax_rrv_post_view_set', 'rrv_action_post_view_set'); //для зарегистрированных (нам сейчас не надо), ключевым является начало wp_ajax_
//Функция обработки ajax запроса
function rrv_action_post_view_set()
{
//получаем переменную для проверки пришел ли запрос от нашего скрипта
$nonce = $_POST['rrv_ajax_nonce'];
// проверяем nonce код, если проверка не пройдена прерываем обработку
//используя придуманную выше уникальную "соль" в нашем случае 'Ftr6euurjdHdf'
if ( !wp_verify_nonce( $nonce, 'Тут может-Быть произвольный_текст' ) )
die ( 'Stop!');
$post_id = absint( $_POST['pid'] ); //получаем id страницы
//Увеличение числа просмотров при просмотре страницы
setPostViews($post_id);
//Отправка кол-ва просмотров страниц вызывающему скрипту (post_view_set.js).
echo getPostViews($post_id);
//exit; //чтобы в ответ не попало ничего лишнего
wp_die(); //рекомендуют в место exit
}
и создаем файл js/post_view_set.js в каталоге темы:
//увиличиваем кол-во просмотров страницы (или поста)
jQuery(document).ready(function($){
/*проверяем переменную rrv_sendPidView и если она определена,
а мы определяем ее например только в single.php и page.php (надо добавить везде где требуется)
для этого прописываем в них такой код:
<script>var rrv_sendPidView = <?php the_ID(); ?>;</script>
Его нужно вставить в цикле вывода контента между while (have_posts()) и endwhile;
*/
if ( typeof( rrv_sendPidView ) !== 'undefined' ) {
jQuery.post(
//переменная post_view_set.url должна быть установленна через php
rrv_postViewSet.url,
{
//вызов экшена rrv_post_view_set
action : 'rrv_post_view_set',
//Отправим id страницы (или поста)
pid: rrv_sendPidView,
// отправим код nonce вместе с остальными данными
rrv_ajax_nonce : rrv_postViewSet.nonce
},
//После ответа от сервера
function( data ) {
//меняем элемент (число просмотров) полученными через ajax данными о номере страницы от сервера
//для страниц (page)
$("div.info_page").children( "a.views" ).html(data);
//для заметок (posts)
$("div.r_part").children( "a.views" ).html(data);
//alert( data );
}
);
}
});
В этом примере не раскрыта тема передачи большого кол-ва параметров от обработчика в скрипт, наверно опишу позднее, вот пока ссылки которые могут помочь:
_https://myrusakov.ru/forum.html?act=thread&id=1453
_https://developer.mozilla.org/ru/docs/Web/JavaScript/Reference/Global_Objects/JSON/parse
_https://myrusakov.ru/javascript-json.html
_https://myrusakov.ru/javascript-associative-array.html