Как отображать посты на шаблоне

Вопрос или проблема

Я добавил шаблон страницы, который является моей новой главной страницей, и я хотел бы просто отобразить последние 5 записей блога. Моя главная страница сейчас выглядит так…

<?php
/**
    * Этот файл управляет разметкой вашей главной страницы
    *
    * @package WordPress
    * @subpackage Pytheas WordPress Theme
    * Имя шаблона: Пользовательская главная
*/

get_header(); ?>

<?php get_template_part('content','slider'); ?>

    <div id="primary" class="content-area span_16 col clr clr-margin">
        <div id="content" class="site-content" role="main">

<?php
        $wp_query = new WP_Query(
            array(
                'post_type' => 'post',
                'showposts' => of_get_option('home_blog_count','4'),
                'no_found_rows' => true,
                'ignore_sticky_posts' => true
            )
        );

        if( $wp_query->posts ) { ?>
            <div id="home-blog" class="row clr">       
                <?php
                // Отобразить заголовок
                if( of_get_option('home_blog_title') ) { ?>
                    <h2 class="heading">
                        <span><?php echo of_get_option('home_blog_title'); ?></span>
                    </h2>
                <?php } ?>       
                <div class="row clr">    
                    <?php
                    // Начать цикл
                    $wpex_count=0;
                    foreach( $wp_query->posts as $post ) : setup_postdata( $post );
                        $wpex_count++;                  
                        $wpex_clr_margin = ( $wpex_count == 1 ) ? 'clr-margin' : NULL; ?>           
                    <div <?php post_class('home-blog-entry span_6 col '. $wpex_clr_margin); ?>>
                        <?php
                        //изображение записи
                        if( has_post_thumbnail() ) { ?>
                            <a href="https://wordpress.stackexchange.com/questions/106386/<?php the_permalink(); ?>" title="<?php the_title_attribute(); ?>" class="home-blog-entry-img-link">
                                <img src="<?php echo aq_resize( wp_get_attachment_url( get_post_thumbnail_id() ), wpex_img('blog_related_entry_width'),  wpex_img('blog_related_entry_height'),  wpex_img('blog_related_entry_crop') ); ?>" alt="<?php echo the_title(); ?>" class="blog-entry-img" />
                            </a>
                        <?php } ?>
                        <h2><a href="https://wordpress.stackexchange.com/questions/106386/<?php the_permalink(); ?>" title="<?php the_title_attribute(); ?>"><?php the_title(); ?></a></h2>
                        <div class="home-blog-entry-excerpt">
                            <?php 
                            // Отобразить отрывок
                            echo ( !empty( $post->post_excerpt ) ) ?
                                apply_filters('the_content', get_the_excerpt() ) :
                                    wp_trim_words( strip_shortcodes( get_the_excerpt() ), of_get_option('portfolio_entry_excerpt_length','200') ); ?>
                        </div><!-- /home-blog-entry-excerpt -->
                    </div><!-- /home-blog-entry -->
                    <?php
                    if( $wpex_count==4) {
                        echo '<div class="clr"></div>';
                        $wpex_count=0;
                    }
                    endforeach; ?>
                 </div><!-- /row -->         
            </div><!-- /home-blog -->       
        <?php
        }
        wp_reset_postdata();?>

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

<?php get_sidebar(); ?>

<?php get_footer();?>

Мне непонятно, почему я не могу сделать что-то вроде…

            <article id="post-<?php the_ID(); ?>" <?php post_class(); ?>>

                <div class="entry-conten clr">
                    <?php the_content(); ?>
                    <?php wp_link_pages( array( 'before' => '<div class="page-links clr">', 'after' => '</div>', 'link_before' => '<span>', 'link_after' => '</span>' ) ); ?>
                </div><!-- .entry-content -->

                <footer class="entry-footer">
                    <?php edit_post_link( __( 'Редактировать страницу', 'wpex' ), '<span class="edit-link">', '</span>' ); ?>
                </footer><!-- .entry-footer -->
            </article><!-- #post -->

            <?php comments_template(); ?>
        <?php endwhile; ?>

что я вижу на многих других шаблонах. Может кто-то помочь мне понять, как я могу запросить самые последние X записей и отобразить их, используя the_content(); (что, как я думаю, отобразит запись с автором, датой записи и т.д.)

$args = array(
            'posts_per_page'=>-1,
            'number_posts'=>-1,
            'category'=>9,
            'orderby'=>'post_date',
            'order' => 'DESC',
            'post_type'=>'post',
            'post_status'=>'publish'                
        );
$posts = get_posts($args);  
foreach($posts as $post):
    $id= $post->ID;
    $permalink = get_permalink( $id );
    $title = $post->post_title;
    $content = $post->post_content;
    $image = wp_get_attachment_url(get_post_thumbnail_id($id));     
endforeach; 

Чтобы изменить основной запрос, который извлекает записи, мне нужно было сделать query_posts( 'posts_per_page=5' ); перед has_posts()

.

Ответ или решение

Для отображения последних 5 записей блога на вашей новой главной странице в WordPress необходимо внести определенные изменения в файл шаблона, который вы уже создали. Здесь я объясню шаги, необходимые для решения вашей задачи, а также разберу применение необходимых функций WordPress.

Этап 1: Настройка шаблона

Убедитесь, что ваш файл шаблона корректно настроен. Вы уже начали с создания файла, названного custom-home.php, и добавили заголовок шаблона в комментариях. Это правильно, так как WordPress будет использовать этот файл для отрисовки главной страницы при выборе соответствующего шаблона в админке.

Этап 2: Получение последних записей

Вы используете WP_Query для получения записей, что является правильным подходом для такой задачи. Чтобы изменить количество записей, верните в запрос число 5, изменив строку 'showposts' => of_get_option('home_blog_count','4') на 'posts_per_page' => 5.

Вот обновленный код:

$wp_query = new WP_Query(
    array(
        'post_type' => 'post',
        'posts_per_page' => 5,  // Получаем 5 записей
        'ignore_sticky_posts' => true
    )
);

Этап 3: Визуализация записей

В вашем шаблоне вы правильно уже используете цикл для отображения постов:

if( $wp_query->have_posts() ) {
    while( $wp_query->have_posts() ) {
        $wp_query->the_post(); // Устанавливаем текущий пост
        // Отображаем необходимые элементы
        echo '<h2>' . get_the_title() . '</h2>'; // Заголовок поста
        echo '<div>' . get_the_excerpt() . '</div>'; // Отрывок поста
    }
}

Этап 4: Использование the_content()

Если вы хотите отобразить полный контент постов, а не только их заголовки или выдержки, сделайте следующее:

  1. Во время цикла замените echo '<div>' . get_the_excerpt() . '</div>'; на the_content(); Это обеспечит отображение полного содержимого вашего поста вместе с метаданными, такими как дата публикации и автор.

Пример кода:

if( $wp_query->have_posts() ) {
    while( $wp_query->have_posts() ) {
        $wp_query->the_post(); // Устанавливаем текущий пост
        echo '<article id="post-' . get_the_ID() . '" ' . post_class() . '>';
            echo '<h2>' . get_the_title() . '</h2>'; // Заголовок поста
            the_content(); // Полный контент поста
        echo '</article>';
    }
}

Этап 5: Восстановление состояния постов

После окончания цикла использования WP_Query, важно восстановить состояние основного объекта постов. Это можно сделать с помощью функции wp_reset_postdata(), которая сбросит глобальные переменные, связанные с запросом.

Вывод

С учетом вышесказанного, вот полный код для отображения последних 5 постов на вашей главной странице с использованием the_content() и других прототипов WordPress:


<?php get_header(); ?>

<?php get_template_part('content','slider'); ?>

<div id="primary" class="content-area span_16 col clr clr-margin">
    <div id="content" class="site-content" role="main">

        <?php
        $wp_query = new WP_Query(
            array(
                'post_type' => 'post',
                'posts_per_page' => 5,
                'ignore_sticky_posts' => true
            )
        );

        if( $wp_query->have_posts() ) {
            while( $wp_query->have_posts() ) {
                $wp_query->the_post();
                echo '<article id="post-' . get_the_ID() . '" ' . post_class() . '>';
                    echo '<h2>' . get_the_title() . '</h2>';
                    the_content(); // Отображение полного контента
                echo '</article>';
            }
            wp_reset_postdata(); //

Оцените материал
Добавить комментарий

Капча загружается...