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