Динамический блок в WP Super Cache через Javascript?

При использовании кеширующего плагина WP Super Cache 1.4.7 возникает проблема с использованием динамического контента. В FAQе этого плагина говорится, что решить проблему можно двумя способами:
1. Через каталог плагинов WP Super Cache (wp-content/plugins/wp-super-cache/plugins/dynamic-cache-test.php)
2. Выводить динамический контент через Javascript/AJAX. Например, как баннеры adsense и т.п..

С первым пунктом понятно и в сети есть инструкции, как и что делать. А вот со вторым пунктом проблемы. К примеру, мне нужно не кешировать динамической блок случайных записей:

<ul class="random_block">
<?php $randompost = $wpdb->get_results("SELECT ID FROM $wpdb->posts WHERE post_status = 'publish' AND post_type = 'post' ORDER BY RAND() LIMIT 10");
if ($randompost) {
foreach ($randompost as $post) {
$ID = $post->ID;
$postid = get_post($post->ID);
$title = $postid->post_title; ?>


	<li>
	<a href="<?php echo get_permalink($postid); ?>" class="wall" rel="bookmark">
			<?php the_post_thumbnail(array(150, 150, true)); ?>
	</a>
	
        <h2><a href="<?php echo get_permalink($postid); ?>" ><?php echo $title ?></a></h2>
	</li>

<?php } } ?>

</ul>


Вопрос: Как этот код обернуть в Javascript, чтобы он не кешировался плагином WP Super Cache?
  • Вопрос задан
  • 787 просмотров
Пригласить эксперта
Ответы на вопрос 2
Сделайте пустой див, функцию, которая при загрузке страницы будет делать Ajax-запрос и помещать его результат в этот див. Ну и обработчик этого запроса, который будет возвращать посты.

Как все это сделать легко гуглится:
wp-kama.ru/id_2018/ajax-v-wordpress.html
habrahabr.ru/company/dataart/blog/271189
api.jquery.com/jquery.ajax:
Ответ написан
Комментировать
dimasmagadan
@dimasmagadan
Вы делаете не совсем правильно.

Во первых, лучше использовать WP_Query()

Во вторых, рандомные выборки лучше делать не так. Как сделано у вас - может тормозить, такой запрос нельзя кэшировать.
Лучше отобрать штук 100-200 записей, можно даже с рандомной сортировкой, закэшировать их, позже на php перемешать полученный массив, и показать только 10 записей.
примерно вот так:
https://gist.github.com/Dimasmagadan/102bcfad9a83a...

Это все нужно будет запихать в функцию, и прицепить к ней action (как советуют в соседнем совете)
add_action('wp_ajax...

В нужном месте сайта выводим пустой див с любым классом или id. Такой блок можно спокойно кэшировать.

Цепляем к сайту js. В котором проверяем наличие этого блока ( if( $('.our-class').length )... ) , если есть, делаем ajax запрос к сайту, полученные данные вставляем в наш див.

Так при каждом обновлении страницы будет рандомный текст в этом блоке.

Можно пойти дальше, забирать с сервера не 10 записей, а все 100. Кэшировать их на стороне клиента в localStorage, так будет только один запрос к серверу при первой загрузке. Все остальные обновления этого блока будут идти без обращения к серверу, забирать с localStorage
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы