Intereting Posts
Как показать только одну категорию в навигационной карте Добавление единицы товара после цены WooCommerce. Пример: $ 24 / м2 и $ 24 / м Показывать границы местоположения виджета для разработки Поиск плагина оглавления (TOC) для WordPress Получение имени пользователя в get_user_meta Создайте таблицу с плагином плагина wordpress история видимости сообщений Как разрешить пользователю вводить текст, запускать код python и возвращать результат? Организация шаблона архива типа персонализированного сообщения Пользовательский короткий код, не отображающий категории и правильную дату Регистрация пользователя WordPress + bbPress – недружественная? Почему мои мета-ящики не будут отображаться на первой странице? Требуется небольшое кодирование с помощью пользовательских полей the_content () Возвращает содержимое сообщения, когда мне нужен контент страницы Как бороться с WordPress на localhost

Wp Super Cache останавливает обновление Post Meta

Для пользовательского виджета «Наиболее популярные сообщения» я создал функцию, которая создает / обновляет мета-сообщение, чтобы сохранить количество просмотров сообщений, и я включил эту функцию в шаблон single.php .

Он отлично работает, пока я не установил WP Super Cache, количество просмотров остается неизменным.

Как я могу использовать эту функцию при активации WP Super Cache?

Это функция, включенная в single.php :

 function save_views($postID){ $metakey = 'postsViews'; $views = get_post_meta($postID,$metakey,true); $count = (empty($views) ? 0 : $views); $count++; update_post_meta($postID,$metakey,$count); } remove_action('wp_head','adjacent_posts_rel_link_wp_head',10,0); 

При использовании WP Super Cache плагин генерирует статические HTML-файлы для ваших шаблонов, а это означает, что любой PHP-код, который вы используете, будет выполняться только при создании или регенерации кешированной страницы.

Поэтому, если вам нужно запустить PHP-код при загрузке каждой страницы из-за кеша, вам нужно использовать AJAX .

Поэтому для вашего случая использования вам понадобятся две функции, добавленные в ваш файл функций. Во-первых, вам нужно добавить Javascript, который делает запрос AJAX нижним колонтитулом всех ваших сообщений. Это сделает следующее:

 function my_count_views_script() { if ( is_single() ) : ?> <script> jQuery.post({ url: '<?php echo admin_url( 'admin-ajax.php' ); ?>', action: 'my_count_views', post_id: <?php the_ID(); ?> }); </script> <?php endif; } add_action( 'wp_footer', 'my_count_views_script' ); 

Это отправляет запрос в файл admin-ajax.php с сообщением post_id просматриваемого сообщения и действием, которое мы хотим выполнить с ним.

Чтобы подсчитать это представление, вам нужно сообщить admin-ajax.php, какой код запускать, когда он получил запрос с действием my_count_views . Вы делаете это, подключаясь к wp_ajax_my_count_views (чтобы обрабатывать его для зарегистрированных пользователей) и wp_ajax_nopriv_my_count_views для зарегистрированных пользователей:

 function my_count_views() { if ( isset( $_POST['post_id'] ) && $_POST['post_id'] ) { $post_id = intval( $_POST['post_id'] ); $views = intval( get_post_meta( $post_id, 'postsViews', true ) ) ?: 0; $views += 1; update_post_meta( $post_id, 'postsViews', $views ); } wp_die(); } add_action( 'wp_ajax_my_count_views', 'my_count_views' ); add_action( 'wp_ajax_nopriv_my_count_views', 'my_count_views' );