@Rubinovsky

Как правильно сделать подгрузку постов с помощью AJAX(Для разных страниц разный HTML поста)?

Есть такой код работает только на одной странице.

index.php
<?
		$args = array(
			'post_type' => 'post',
			'posts_per_page' => 3,
			'cat' => $categID
		);

	            $loop = new WP_Query($args);

	            while ($loop->have_posts()) : $loop->the_post();?>
				<div class="material_item">
					<a class="material_item__photo" href="<?php the_permalink(); ?>" >
						<?php the_post_thumbnail(); ?>
					</a>
					<div class="material_item__bottom">
						<span class="mi__bottom__date"><?php the_time(); ?></span>
						<?php 
							$categories = get_the_category(); 
							if($categories[0]){
								 echo '<a href="' . get_category_link($categories[0]->term_id ) . '" class="mi__bottom__tag">'. $categories[0]->name . '</a>'; 
							}
						?>
						<span class="mi__bottom__viewers"><i class="fa fa-eye"></i><?php the_views() ?></span>
					</div>
					<a class="material_item__title" href="<?php the_permalink(); ?>"><?php the_title(); ?></a>
				</div><?php
	            endwhile;
	        wp_reset_postdata();?>
				<div style="display: none;">
					<p class="ajaxurl"><?php echo site_url() ?>/wp-admin/admin-ajax.php</p>
					<p class="true_posts"><?php echo serialize($wp_query->query_vars); ?></p>
					<p class="current_page"><?php echo (get_query_var('paged')) ? get_query_var('paged') : 1; ?></p>
					<p class="max_pages"><?php echo $wp_query->max_num_pages; ?></p>
				</div>
				<div id="true_loadmore" class="board-more">
					<span>Больше</span>
				</div>


functions.php
function mysearchexclude($query) {
    if ($query->is_search) {
        $query->set('category__not_in', array(20, 22));
    }
    return $query;
}
add_filter('pre_get_posts','mysearchexclude');

function true_load_posts(){
    $args = unserialize(stripslashes($_POST['query']));
    $args['paged'] = $_POST['page'] + 1; // следующая страница
    $args['post_status'] = 'publish';
    $args['posts_per_page'] =  16;
    $q = new WP_Query($args);
    if( $q->have_posts() ):
        while($q->have_posts()): $q->the_post();?>
                <div class="news__board-link">
                    <span class="board-link__date"><?php the_time(); ?>
                    <a href="<?php the_permalink(); ?>" class="board-link__title"><?php the_title() ?></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');


common.js
$('#true_loadmore').click(function(){
		$(this).find('span').addClass('loading').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').find('span').removeClass('loading').text('Больше'); 
					$('#true_loadmore').before(data);// вставляем новые посты
					current_page++; // увеличиваем номер страницы на единицу
					if (current_page == max_pages) $("#true_loadmore").remove(); // если последняя страница, удаляем кнопку
				} else {
					$('#true_loadmore').remove(); // если мы дошли до последней страницы постов, скроем кнопку
				}
			}
		});
	});
  • Вопрос задан
  • 383 просмотра
Пригласить эксперта
Ваш ответ на вопрос

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

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