Skip to content

Instantly share code, notes, and snippets.

@Umbrous
Created August 3, 2016 07:42
Show Gist options
  • Save Umbrous/40d9dab7b547814365acb7d2dfffe85b to your computer and use it in GitHub Desktop.
Save Umbrous/40d9dab7b547814365acb7d2dfffe85b to your computer and use it in GitHub Desktop.
Динамическая подгрузка постов wordPress
function true_load_posts(){
$args = unserialize(stripslashes($_POST['query']));
$args['paged'] = $_POST['page'] + 1; // следующая страница
$args['post_status'] = 'publish';
$q = new WP_Query($args);
if( $q->have_posts() ):
while($q->have_posts()): $q->the_post();
/*
* Со строчки 13 по 27 идет HTML шаблон поста, максимально приближенный к теме TwentyTen.
* Для своей темы вы конечно же можете использовать другой код HTML.
*/
?>
<div class="wrap_work mix<?php
$tags = wp_get_post_tags( $q->post->ID );
if ($tags) {
foreach ($tags as $tag) {
echo ' ' . $tag->name;
}
}
?>" style="display: inline-block" data-myorder="<?php echo $q->post->ID ?>">
<?php the_post_thumbnail( array( 364, 364 )); ?>
<a href="#" class="animated fadeIn">
<strong><?php the_title(); ?></strong>
<?php the_content() ?>
<span class="btn_y"><?php echo get_post_meta ( $q->post->ID, 'more', true ); ?></span>
</a>
</div>
<?php
endwhile;
endif;
wp_reset_postdata();
die();
}
add_action('wp_ajax_loadmore', 'true_load_posts');
add_action('wp_ajax_nopriv_loadmore', 'true_load_posts');
<? $countcat = get_category(10 ,false); ?>
<?php if ( $countcat->count > 9 ) : ?>
<script>
var ajaxurl = '<?php echo site_url() ?>/wp-admin/admin-ajax.php';
var true_posts = '<?php echo serialize($wp_query->query_vars); ?>';
var current_page = <?php echo (get_query_var('paged')) ? get_query_var('paged') : 1; ?>;
var max_pages = '<?php echo $wp_query->max_num_pages; ?>';
</script>
<div id="true_loadmore" class="btn_y">Загрузить ещё</div>
<?php endif; ?>
jQuery(function($){
$('#true_loadmore').click(function(){
$(this).text('Загружаю...'); // изменяем текст кнопки, вы также можете добавить прелоадер
var data = {
'action': 'loadmore',
'query': true_posts,
'page' : current_page
};
$.ajax({
url:ajaxurl, // обработчик
data:data, // данные
type:'POST', // тип запроса
success:function(data){
if( data ) {
$('#true_loadmore').text('Загрузить ещё').before(data); // вставляем новые посты
current_page++; // увеличиваем номер страницы на единицу
if (current_page == max_pages) $("#true_loadmore").remove(); // если последняя страница, удаляем кнопку
} else {
$('#true_loadmore').remove(); // если мы дошли до последней страницы постов, скроем кнопку
}
$('.filter, .wrap_work').on('click', 'a', function(e){
e.preventDefault();
});
}
});
});
});
@nikpros
Copy link

nikpros commented Sep 2, 2019

Скажи, пожалуйста, а какие должны быть Настройки->Чтение в админке при такой подгрузке?

@max3w
Copy link

max3w commented Oct 16, 2020

Большое спасибо! Этот вариант реально заработал!
Только функцию плагинации заменил на более понятную и поставил ее в function.php, и вызываю в шаблонах где это необходимо:
<?php pagination(); // пагинация, функция нах-ся в function.php ?>

function pagination() { // функция вывода пагинации
	global $wp_query; // текущая выборка должна быть глобальной
if ( $wp_query->max_num_pages > 1 ) { //Если страниц больше 1, показываем кнопку
?>
    <script>
		var ajaxurl = '<?php echo site_url() ?>/wp-admin/admin-ajax.php';
		var true_posts = '<?php echo serialize($wp_query->query_vars); ?>';
		var current_page = <?php echo (get_query_var('paged')) ? get_query_var('paged') : 1; ?>;
		var max_pages = '<?php echo $wp_query->max_num_pages; ?>';
	</script>
	<div id="true_loadmore" class="btn_y">Загрузить ещё</div>
<?php } 		
}

+тот код что приведен в начале для function.php

Строки 17-27 в свою очередь заменил более простым вызовом шаблона loop.php

get_template_part('loop'); // для отображения каждой записи берем шаблон loop.php

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment