Как вывести последние 3 записи (свежие записи) на статической странице?

14 дек. 2011 г., 14:56:29
Просмотры: 162K
Голосов: 17

Я хочу реализовать что-то вроде "свежих записей" на статической странице:

http://themes.codehunk.me/insignio/ (в подвале)

Как я могу сделать это без использования виджета?

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

Обычно я использую такой подход:

неправильный подход

<?php query_posts( array(
   'category_name' => 'news',
   'posts_per_page' => 3,
)); ?>

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

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

<?php else : ?>

   <p><?php __('Новостей нет'); ?></p>

<?php endif; ?>

С помощью @swissspidy правильный способ выглядит так:

<?php 
   // запрос
   $the_query = new WP_Query( array(
     'category_name' => 'news',
      'posts_per_page' => 3,
   )); 
?>

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

    <?php the_title(); ?>
    <?php the_excerpt(); ?>

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

<?php else : ?>
  <p><?php __('Новостей нет'); ?></p>
<?php endif; ?>

Подробнее см. @codex.

1 февр. 2017 г. 19:17:53
Комментарии

Мне нравится ссылаться на http://wordpress.stackexchange.com/a/1755/12404, чтобы показать, почему использование query_posts() почти всегда плохая идея.

swissspidy swissspidy
1 февр. 2017 г. 22:44:27
3

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

Кодекс содержит пример этого, и вот еще один, очень упрощенный пример.

<?php
/*
Template Name: Страница записей
*/
get_header(); 
?>

<?php while( have_posts() ): the_post(); /* начало основного цикла */ ?>

    <h1><?php the_title(); ?></h1>

    <?php
        /* Начало вторичного цикла */
        $other_posts = new WP_Query( /* возможно, какие-то аргументы здесь? */ );
        while( $others_posts->have_posts() ): $other_posts->the_post(); 
    ?>
        Здесь вы можете делать все, что делаете в основном цикле, и это будет
        применяться к записям вторичного цикла
    <?php 
        endwhile; /* конец вторичного цикла */ 
        wp_reset_postdata(); /* Восстановление оригинальной страницы в переменной $post */
    ?>

<?php endwhile; /* Конец основного цикла */ ?>

Если вам нужно что-то, что можно вставить на любую страницу, лучшим решением будет шорткод. Вам нужно будет создать шорткод, который получает несколько записей и возвращает их в виде списка (или в любом другом виде). Пример:

<?php
add_action( 'init', 'wpse36453_register_shortcode' );
/**
 * Регистрирует шорткод с помощью add_shortcode, чтобы WordPress знал о нем.
 */
function wpse36453_register_shortcode()
{
    add_shortcode( 'wpse36453_posts', 'wpse36453_shortcode_cb' );
}

/**
 * Функция обратного вызова для шорткода. Возвращает наш список записей.
 */
function wpse36453_shortcode_cb( $args )
{
    // получаем записи
    $posts = get_posts(
        array(
            'numberposts'   => 3
        )
    );

    // Нет записей? Выходим!
    if( empty( $posts ) ) return '';

    /**
     * Проходим по каждой записи, получаем нужные данные и добавляем их в
     * переменную, которую вернем
     */ 
    $out = '<ul>';
    foreach( $posts as $post )
    {
        $out .= sprintf( 
            '<li><a href="%s" title="%s">%s</a></li>',
            get_permalink( $post ),
            esc_attr( $post->post_title ),
            esc_html( $post->post_title )
        );
    }
    $out .= '</ul>';
    return $out;
}
14 дек. 2011 г. 16:01:45
Комментарии

Могу ли я поместить это в header.php или нужно разместить где-то еще?

user385917 user385917
15 дек. 2011 г. 13:49:28

Первый пример можно разместить в любом месте вашей темы. Второй пример с шорткодом должен быть помещен в functions.php

chrisguitarguy chrisguitarguy
15 дек. 2011 г. 18:35:10

первый блок кода не имеет цикла для перебора 3 записей

Murhaf Sousli Murhaf Sousli
10 июн. 2014 г. 04:09:18
0

В WordPress Codex есть руководство для данного конкретного случая. Ознакомьтесь с ним здесь: Я привожу код здесь, так как он довольно короткий, для получения дополнительной информации посетите сайт wordpress.org.

<?php
$args = array( 'numberposts' => 10, 'order'=> 'ASC', 'orderby' => 'title' );
$postslist = get_posts( $args );
foreach ($postslist as $post) :  setup_postdata($post); ?> 
    <div>
        <?php the_date(); ?>
        <br />
        <?php the_title(); ?>   
        <?php the_excerpt(); ?>
    </div>
<?php endforeach; ?>
26 окт. 2012 г. 16:19:01
0

WordPress предоставляет функцию для такого рода запросов: query_posts().

query_posts() — это самый простой способ изменить стандартный запрос, который WordPress использует для отображения записей. Используйте query_posts(), чтобы отображать другие записи, отличные от тех, которые обычно отображаются по определенному URL.

Например, на главной странице обычно отображаются последние 10 записей. Если вы хотите показать только 5 записей (и вас не волнует пагинация), вы можете использовать query_posts() следующим образом:

query_posts( 'posts_per_page=5' );

После выполнения запроса вы можете отображать записи так, как вам нужно.

14 дек. 2011 г. 15:25:19
1
-1
<?php 
// Создаем новый запрос для получения 3 последних записей
$the_query = new WP_Query( 'posts_per_page=3' ); 

// Начинаем цикл вывода записей
while ($the_query -> have_posts()) : $the_query -> the_post();?>
<?php /* здесь может быть HTML разметка */ the_title(); ?>
<?php 
endwhile;
// Сбрасываем данные запроса
wp_reset_postdata();
?>
16 мая 2019 г. 14:21:23
Комментарии

это код, который отвечает на вопрос - Как отобразить последние 3 записи (свежие посты) на статической странице? Помогло бы вам, если бы я сказал - "Я обычно использую этот подход:"?

Jon Jon
16 мая 2019 г. 15:25:22