Как запросить "сообщения на странице", чтобы отобразить другой шаблон индекса сообщений в блоге?


Попытка создать шаблон блога "переключение" с помощью home.php, управляемый настройкой "Записи в блоге на страницу" в административной области. Если установлено значение "1", будет отображаться шаблон одной записи. Что-нибудь выше, и он отобразит шаблон архива.

В деталях:

Следующий код работает, за исключением разбиения на страницы архива (нажатие на более старые/новые записи изменяет URL-адрес, но отображает только содержимое первой страницы).

<div id="primary" class="content-area">

<h2>Switching Blog Template</h2>

<?php   // Get ppp for query
        $ppp_val = get_option( 'posts_per_page' ); ?>

<?php 
// Single post loop

$blogsingle_query = new WP_Query( $ppp_val <= 1 );

if($blogsingle_query->have_posts()) : 
while($blogsingle_query->have_posts()) : $blogsingle_query->the_post();

get_template_part( 'parts/content', 'post' );

endwhile;
wp_reset_postdata();
the_post_navigation();
endif;
?>

<?php
// Multiple posts loop ( PAGINATION DOESN'T WORK )

$blogmulti_query = new WP_Query( $ppp_val > 1 ); 

if($blogmulti_query->have_posts()) : 
while($blogmulti_query->have_posts()) : $blogmulti_query->the_post();

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

endwhile;
wp_reset_postdata(); 
the_posts_navigation();
endif;
?>


</div><!-- #primary -->

Для сравнения, этот альтернативный метод не работает, но кажется, что это может быть лучший путь для следования?

<div id="primary" class="content-area">

<h2>Switching Blog Template</h2>

<?php $ppp_val = get_option( 'posts_per_page' ); ?>

<?php 
$args=array(
  'posts_per_page' => $ppp_val, // Get number of posts value
  'meta_query' = array(
    array(
      'key' => 'posts_per_page', // Use this to compare
      'compare' => '>',
      'value' => 1,
      'type' => 'NUMERIC',
    )
  ),
);
$switch_query = new WP_Query( $args ); 
?>

<?php 
if($switch_query->have_posts()) : 
while($switch_query->have_posts()) : $switch_query->the_post(); 

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

endwhile; else: 
?>

<?php get_template_part( 'parts/content', 'post' ); ?>

<?php endif; ?>

</div><!-- #primary -->
Author: Ethan O'Sullivan, 2017-01-14

2 answers

Вы можете управлять тем, какой шаблон загружается для любого типа запроса, с помощью фильтров шаблонов .

Вот пример использования home_template, который проверяет, равно ли posts_per_page 1, и загружает single.php в этом случае.

function wpd_home_template( $home_template = '' ){
    if( get_option( 'posts_per_page' ) == 1 ){
        $home_template = locate_template( 'single.php', false );
    }
    return $home_template;
}
add_filter( 'home_template', 'wpd_home_template' );
 1
Author: Milo, 2017-01-14 04:44:05

Спасибо Майло, чей ответ был идеальным. Раньше я не сталкивался с фильтрами шаблонов.

В интересах будущих читателей мой окончательный код (ниже) был изменен, чтобы ссылаться на оба требуемых шаблона.

function wpd_home_template( $home_template = '' ){
    if( get_option( 'posts_per_page' ) == 1 ){
        $home_template = locate_template( 'single.php', false );
    }
    elseif( get_option( 'posts_per_page' ) > 1 ){
        $home_template = locate_template( 'archive.php', false );
    }
    return $home_template;
}
add_filter( 'home_template', 'wpd_home_template' );

Конец связи!

- А

 0
Author: the-first-man, 2017-01-14 05:08:49