@ashfedor

Как сделать асинхронную загрузку постов, для разных рубрик?

Чтоб был понятен вопрос, попробую подробнее.
На сайте для разных рубрик разный вывод постов на страницах категорий.
Например делаю асинхронную подгрузку постов в категории blog
по циклом вывожу.
<?php if ($wp_query->max_num_pages > 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>
              <span id="true_loadmore" class="cat__btn-more">Load more</span>
            <?php endif; ?>


далее создаю файл loadmore.js
с кодом
jQuery(function($){
  $('#true_loadmore').click(function(){
    $(this).text('load...'); // изменяем текст кнопки, вы также можете добавить прелоадер
    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('Load more').before(data); // вставляем новые посты
          current_page++; // увеличиваем номер страницы на единицу
          if (current_page == max_pages) $("#true_loadmore").remove(); // если последняя страница, удаляем кнопку
        } else {
          $('#true_loadmore').remove(); // если мы дошли до последней страницы постов, скроем кнопку
        }
      }
    });
  });
});


далее подключаю его в functions.php

//асинхронная подгрузка постов в категориях
function true_loadmore_scripts() {
  wp_enqueue_script('jquery');

  wp_enqueue_script( 'true_loadmore', get_stylesheet_directory_uri() . '/assets/js/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';

  // обычно лучше использовать WP_Query, но не здесь
  query_posts( $args );
  // если посты есть
  if( have_posts() ) :

    // запускаем цикл
    while( have_posts() ): the_post();

      get_template_part( 'template-parts/content', 'archive' );

    endwhile;

  endif;
  die();
}


add_action('wp_ajax_loadmore', 'true_load_posts');
add_action('wp_ajax_nopriv_loadmore', 'true_load_posts');


Как видим по коду для подгрузки у меня выводятся посты с основным шаблоном content.php
Но например для рубрики Reviews мне нужно выводить из шаблона content-reviews.php
Пробовал тупо клонировать, но запутался и не получилось, слаб в JS
Буду признателен за помощь!
  • Вопрос задан
  • 730 просмотров
Решения вопроса 1
@Hormet
просто нужно сделать как-то так:
while( have_posts() ): the_post();
      $post_type = get_the_category(); //тут будет масив категорий вашого поста
      get_template_part( 'template-parts/content', $post_type[0] ); //мы возмем только первою категорию
    endwhile;


если части названия сделаны в формате content-slug, то должно работать кок надо сразу :)
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы