Добавляем на сайт функционал подгрузки постов «налету». Данная технология применяется в соц. сетях, а также крупных интернет-магазинах.
В funсtion.php
// Добавляем подгрузку постов
function true_loadmore_scripts() {
wp_enqueue_script('jquery'); // скорее всего он уже будет подключен, это на всякий случай
wp_enqueue_script( 'true_loadmore', get_stylesheet_directory_uri() . '/loadmore.js', array('jquery') );
}
add_action( 'wp_enqueue_scripts', 'true_loadmore_scripts' );
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 шаблон поста.
*/
?>
<div <?php post_class() ?> id="post-<?php the_ID(); ?>"><div class="post-line">
<a href="<?php the_permalink(); ?>">
<?php if(has_post_thumbnail()) {
the_post_thumbnail('produkt');
} else {
echo '<img src="'.get_bloginfo("template_url").'/images/img-default.jpg" />';
} ?>
<h2><?php the_title(); ?></h2></a>
<div align="center" class="proizvoditel"><?php the_tags( '<small>Продукция:</small> ', ', ', '<br />' ); ?></div>
</div></div>
<?php
endwhile; ?> <!--<hr>-->
<?php endif;
wp_reset_postdata();
die();
}
add_action('wp_ajax_loadmore', 'true_load_posts');
add_action('wp_ajax_nopriv_loadmore', 'true_load_posts');
Добавить по вышеуказанному в funсtions пути скрипт loadmore.js
jQuery(function($){
$(window).scroll(function(){
var bottomOffset = 1500; // отступ от нижней границы сайта, до которого должен доскроллить пользователь, чтобы подгрузились новые посты
var data = {
'action': 'loadmore',
'query': true_posts,
'page' : current_page
};
if( $(document).scrollTop() > ($(document).height() - bottomOffset) && !$('body').hasClass('loading')){
$.ajax({
url:ajaxurl,
data:data,
type:'POST',
beforeSend: function( xhr){
$('body').addClass('loading');
},
success:function(data){
if( data ) {
$('#true_loadmore').before(data);
$('body').removeClass('loading');
current_page++;
}
}
});
}
});
});
В шаблон вывода постов после endwhile
<?php if ( $wp_query->max_num_pages > 1 ) : ?>
<script id="true_loadmore">
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; ?>;
</script>
<?php endif; ?>
Есть альтернативный способ погрузки при нажатии на кнопку.
