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

Чтоб был понятен вопрос, попробую подробнее.
На сайте для разных рубрик разный вывод постов на страницах категорий.
Например делаю асинхронную подгрузку постов в категории 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
Буду признателен за помощь!
  • Вопрос задан
  • 738 просмотров
Решения вопроса 1
@Hormet
просто нужно сделать как-то так:
while( have_posts() ): the_post();
      $post_type = get_the_category(); //тут будет масив категорий вашого поста
      get_template_part( 'template-parts/content', $post_type[0] ); //мы возмем только первою категорию
    endwhile;


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

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

Похожие вопросы
23 нояб. 2024, в 01:31
1000 руб./за проект
23 нояб. 2024, в 00:16
2000 руб./за проект
22 нояб. 2024, в 23:55
3000 руб./за проект