Как вывести пользовательские типы записей на главную страницу
Я пытаюсь создать портфолио на WordPress, используя Custom Post Type для отображения моих проектов. Каждый проект я хочу выводить на статической главной странице с изображением в качестве миниатюры, при клике на которое будет открываться страница проекта.
Как разместить Custom Post Types на статической главной странице? Мне нужно показывать только последние 6 записей, а остальные будут доступны через навигацию.
Примечание: Этот ответ был написан до того, как я понял, что у автора вопроса статическая главная страница. Я оставил его здесь на случай, если он будет полезен кому-то еще, и добавил второй ответ для случая со статической главной страницей.
Этот код добавит ваш пользовательский тип записей в основной цикл на главной странице:
add_action( 'pre_get_posts', 'wpse_242473_add_post_type_to_home' );
function wpse_242473_add_post_type_to_home( $query ) {
if( $query->is_main_query() && $query->is_home() ) {
$query->set( 'post_type', array( 'post', 'ваш_пользовательский_тип_записей_здесь') );
}
}
Проверка is_home
гарантирует, что мы находимся на главной странице блога, а is_main_query
обеспечивает, чтобы мы случайно не затронули второстепенные циклы.
Если вам нужен только ваш пользовательский тип записей без обычных записей, просто удалите post
из массива типов записей.
В интернете есть несколько некорректных статей, которые рассматривают это действие как фильтр. На самом деле это не так - оно передает запрос по ссылке, что позволяет напрямую устанавливать параметры запроса.

Итак, если вы зарегистрировали свой тип записи (CPT) с именем wpse_242473_custom_post_type
, вы можете использовать этот код для вывода 6 последних записей этого типа на статическую главную страницу (или куда угодно). Вы можете использовать шорткод или тег шаблона, и функция должна работать в обоих случаях.
Это модификация кода, который я использую на многих сайтах. Поместите его в файл functions.php
вашей темы. Конечно, вы можете изменить используемый HTML под свои нужды.
Я добавил одну фичу, которую давно хотел попробовать, так что если у вас возникнут проблемы, дайте мне знать — я протестирую её как следует. Суть в том, что я добавил полный набор необязательных аргументов, которые позволяют одной и той же функции работать, надеюсь, и как шорткод, и как тег шаблона. Вы можете либо вставить [recentposts]
в визуальный редактор на любой странице, либо добавить <?php wpse_242473_recent_posts(); ?>
в любой шаблон вашей темы.
Чтобы добавить это в шаблон статической главной страницы, отредактируйте (или создайте) файл front-page.php
. Он будет автоматически выбран для статической главной страницы без необходимости указывать его в настройках страницы.
function wpse_242473_recent_posts( $atts = null, $content = null, $tag = null ) {
$out = '';
$args = array(
'numberposts' => '6',
'post_status' => 'publish',
'post_type' => 'wpse_242473_custom_post_type' ,
);
$recent = wp_get_recent_posts( $args );
if ( $recent ) {
$out .= '<section class="overview">';
$out .= '<h1>Recent Projects</h1>';
$out .= '<div class="overview">';
foreach ( $recent as $item ) {
$out .= '<a href="' . get_permalink( $item['ID'] ) . '">';
$out .= get_the_post_thumbnail( $item['ID'] );
$out .= '</a>';
}
$out .= '</div></section>';
}
if ( $tag ) {
return $out;
} else {
echo $out;
}
}
add_shortcode( 'recentposts', 'wpse_242473_recent_posts' );
Это простая выборка нужных вам записей.
Цикл foreach
формирует HTML, а условие в конце либо возвращает HTML (если использовался шорткод), либо выводит его (если функция вызывается как тег шаблона).
Во многих статьях в интернете не упоминается третий аргумент, передаваемый всем обработчикам шорткодов. При использовании шорткода он содержит имя шорткода, поэтому в теории один обработчик может работать с несколькими шорткодами. В данном случае мы используем его, чтобы определить, была ли функция вызвана как обработчик шорткода или нет.

Вы можете выполнить следующие шаги:
1) Создать шаблон для вашего CPT (пользовательского типа записи)
2) Поместить следующий код в этот шаблон; замените CPT на ваш тип записи.
3) Создать новую страницу и опубликовать её, выбрав этот шаблон в правой части экрана.
4) Наконец, перейти в настройки, затем кликнуть на "Чтение" и выбрать главную страницу в разделе "Статическая страница".
Код:
<?php
/**
*Имя шаблона: CPT
* @package CPT
* @since CPT 1.0
*/
get_header();
global $paged;
if( get_query_var( 'paged' ) ) {
$paged = get_query_var( 'paged' );
} elseif( get_query_var( 'page' ) ) {
$paged = get_query_var( 'page' );
} else {
$paged = 1;
}
$args = array(
'post_type' => 'CPT',
'posts_per_page'=>6,
'paged' => $paged,
);
$query = new WP_Query($args);
?>
<?php if ( $blog_query->have_posts() ) : ?>
<?php while ( $query->have_posts() ) : $query->the_post(); ?>
<div class="post-thumbnail">
<?php if ( (function_exists('has_post_thumbnail')) && (has_post_thumbnail()) ) {?>
<a href="<?php the_permalink(); ?>" title="<?php the_title_attribute(); ?>">
<?php the_post_thumbnail(); ?>
</a>
<?php }
?>
</div>
<?php endwhile; ?>
<?php endif; ?>
<?php get_footer(); ?>
