Как запросить "сообщения на странице", чтобы отобразить другой шаблон индекса сообщений в блоге?
Попытка создать шаблон блога "переключение" с помощью 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 -->
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' );
Спасибо Майло, чей ответ был идеальным. Раньше я не сталкивался с фильтрами шаблонов.
В интересах будущих читателей мой окончательный код (ниже) был изменен, чтобы ссылаться на оба требуемых шаблона.
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' );
Конец связи!
- А