Как вывести пользовательские типы записей на главную страницу

13 окт. 2016 г., 00:22:34
Просмотры: 17K
Голосов: 4

Я пытаюсь создать портфолио на WordPress, используя Custom Post Type для отображения моих проектов. Каждый проект я хочу выводить на статической главной странице с изображением в качестве миниатюры, при клике на которое будет открываться страница проекта.

Как разместить Custom Post Types на статической главной странице? Мне нужно показывать только последние 6 записей, а остальные будут доступны через навигацию.

0
Все ответы на вопрос 3
1

Примечание: Этот ответ был написан до того, как я понял, что у автора вопроса статическая главная страница. Я оставил его здесь на случай, если он будет полезен кому-то еще, и добавил второй ответ для случая со статической главной страницей.

Этот код добавит ваш пользовательский тип записей в основной цикл на главной странице:

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 из массива типов записей.

В интернете есть несколько некорректных статей, которые рассматривают это действие как фильтр. На самом деле это не так - оно передает запрос по ссылке, что позволяет напрямую устанавливать параметры запроса.

13 окт. 2016 г. 00:50:22
Комментарии

Есть идеи, как исключить пользовательские записи без категории?

Keyslinger Keyslinger
14 июн. 2021 г. 21:46:19
0

Итак, если вы зарегистрировали свой тип записи (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 (если использовался шорткод), либо выводит его (если функция вызывается как тег шаблона).

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

14 окт. 2016 г. 12:10:31
0

Вы можете выполнить следующие шаги:
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(); ?>
13 окт. 2016 г. 21:14:19