Как вывести последнюю и предпоследнюю записи в разных блоках?

Всем добрый день! 🙂
Работая над очередной темкой столкнулся с таким вапросом, "Каким образом можно вывести последнюю запись в одном блоке, а предпоследнюю в другом ( т.е. в другой части страници).
Причем выводилось чтобы не весь текст записи а только определенное количество символов.
В данный момент стоит токой код:

<h2>
<a href="<?php the_permalink() ?>" rel="bookmark"><?php the_title(); ?></a>
</h2>
<div>
<?php the_time('d.m.Y') ?> @ <?php the_category(', ') ?>
<p>
 <?php the_excerpt(); ?>
</p>
</div>

Но выводит только последнюю запись.
Подскажите пожалуйста как реализовать данную задачу!
Заранее спасибо!
С уважением, Александр!

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

Я прочитал, но если я не ошибаюсь нету вывода записи до опрделенного символа! Или я всетаки ошибаюсь?

Это был совет к первому вопросу. Второй – про количество символов – вообще не вопрос. Вывод подстроки – это азы php.

Поймите меня правильно. Я неразбираюсь, к сожалению, в пхп настолько хорошо чтобы осущестивть данную задачу. 🙁
И если незатруднит прашу памочь!

Вот что мне удалось сдалть. Выводит последнюю запись в сокращенном варианте. (Из любой категории или конкретной)

<?php
           $posts_new = get_posts('category=&numberposts=1');

           foreach ($posts_new as $post_new) :
                    echo '<h2><a href="'; 
                    echo get_permalink($post_new->ID);
                    echo '">';
                    echo $post_new->post_title;
                    echo '</a></h2>';        
                    echo '<div>';
            echo '<p>';

                    echo the_excerpt();     
            echo '</p>';
                    echo '</div>';
                endforeach;
?>

Ю.Б. Спасибо за точ, что всетаки заставили меня покапатьсо в коде 🙂

Но всеже у меня нехватает ума вывести предпоследнюю запись! 🙂

Пожалуйста помогите осуществить ету небальшую задачку.

Другое дело 🙂
Смотрите, обычно цикл (Loop) устроен так:
<?php if (have_posts()) : while (have_posts()) : the_post(); ?>
вывод
<?php endwhile; else: ?>
если нет ничего
<?php endif; ?>

То есть, в цикле столько раз, сколько получилось выбрать постов, запускается the_post(). Никто не мешает делать вызов не в цикле (while), а вручную, повторив the_post() столько раз, сколько нужно. Суть от этого не меняется.

Можно попробовать сделать так. В начала страницы запросить два поста:
<?php query_posts(‘posts_per_page=2’); ?>
Затем в первом блоке получить один первый пост:
<?php the_post(); ?> (эта функция инициализирует объкет $post данными из первого поста)
и вывести как обычно (см. любую простенькую Тему), через the_permalink(), the_title() и the_excerpt()
Затем в другой части страницы, во втором блоке опять получить пост через <?php the_post(); ?> (это будет уже второй) и вывести его аналогичным (или другим) способом.

Конечно, стоило бы к этому коду перед каждым the_post(); добавить проверку if (have_posts()), чтобы аккуратненько было.

Пробуйте.

Спасибо! Сделал по вашему совету!
Вывел вот таким образом, но при переходе по ссылке на странице текст из первого поста стоит, хотя ссылки разные.

Я вывожу в шапке сайта т.е. в header.php эти посты и у меня получается что на всех страницах в рубрике по 2а поста становится. 🙂

<body>
<?php query_posts('posts_per_page=2'); ?>

Пример вывода последний пост:

<?php if (have_posts()) : ?>
        
<?php while (have_posts()) : the_post(); ?>    
        
        <?php the_post(); ?>
        <div class="post">
            
        <h2><a title="<?php the_title(); ?>" href="<?php the_permalink() ?>" rel="bookmark"><?php the_title(); ?></a></h2>
            
            <p>
            <?php the_excerpt(); ?>
            </p>
        
        </div>    

<?php endwhile; ?>
        
            Next...
        
<?php endif; ?>

Предпоследний пост:

<?php the_post(); ?>
    <div class="post">
            
    <h2><a title="<?php the_title(); ?>" href="<?php the_permalink() ?>" rel="bookmark"><?php the_title(); ?></a></h2>
            
            <p>
                <?php the_excerpt(); ?>
            </p>
        
            </div>

Я думаю. что чтото сделал неверно скорее всего…

а почему ты думаешь, что вторая часть выведет тебе последний пост?
правда я так и не понял, что ты подразумеваешь под понятием "последний пост" – это тот что от старости свалился вниз, или же последний добавленный.?

walaby, Вобщем я пытаюсь реализовать вывод в шапке сайта последний добвленный и предпоследний добавленный пост.
но пока ето у меня несавсем получается. К сожалению

Вы ж не сказали, что это в шапке и что потом обычный вывод будет

<?php $lastposts = get_posts(‘numberposts=2’); ?>
….
<?php setup_postdata($post = $lastposts[0]); ?>
<h2><a title="<?php the_title(); ?>" href="<?php the_permalink() ?>" rel="bookmark"><?php the_title(); ?></a></h2>
<p><?php the_excerpt(); ?></p>
…..
<?php setup_postdata($post = $lastposts[1]); ?>
<h2><a title="<?php the_title(); ?>" href="<?php the_permalink() ?>" rel="bookmark"><?php the_title(); ?></a></h2>
<p><?php the_excerpt(); ?></p>

<ul>
<?php
$posts_new = get_posts('numberposts=2');
foreach ($posts_new as $post_new) :
echo '<li><a href="'; 
echo get_permalink($post_new->ID);
echo '">';
echo $post_new->post_title;
echo '</a></li>';
echo '<p>';
echo $post_new->post_excerpt;
echo '</p>';
endforeach;
?>
</ul>

Ю.Б. СПАСИБО БАЛЬШОЕ! Ваш вариант беспадобен!

Только если несложно обьясните как это работает:

<?php setup_postdata($post = $lastposts[0]); ?>

и

<?php setup_postdata($post = $lastposts[1]); ?>

И где про ето можно почитать?
Спасибо!

walaby, мне в разных блоках нужно вывести было!
Спасибо за вариант. 🙂

окей, в блоке, где надо вывести ПОСЛЕДНЮЮ запись:

<ul>
<?php
$posts_new = get_posts('numberposts=1');
foreach ($posts_new as $post_new) :
echo '<li><a href="'; 
echo get_permalink($post_new->ID);
echo '">';
echo $post_new->post_title;
echo '</a></li>';
echo '<p>';
echo $post_new->post_excerpt;
echo '</p>';
endforeach;
?>
</ul>

где надо вывести ПРЕДПОСЛЕДНЮЮ запись:

<ul>
<?php
$posts_new = get_posts('numberposts=1&offset=1');
foreach ($posts_new as $post_new) :
echo '<li><a href="'; 
echo get_permalink($post_new->ID);
echo '">';
echo $post_new->post_title;
echo '</a></li>';
echo '<p>';
echo $post_new->post_excerpt;
echo '</p>';
endforeach;
?>
</ul>

а что ставить – список ul li или h1 итп – дело Ваше, в моем случае список ul li

Элементарно, Ватсон! 🙂
Сначала мы вызвали функцию get_posts, которая вернула нам массив из двух элементов типа объект класса "пост". (Не страшно пока?) Затем мы переменной (объекту) $post присвоили значение первого элемента массива, то есть последнего поста, и это значение передали функции setup_postdata (не документирована в Кодексе, но упоминается в примерах), которая инициализирует полезные глобальные переменные. Вторая строка – то же самое, но со вторым элементом массива, т.е. предпоследним постом.

Как же все просто у вас получается! Я целый день думал как ето сделать…
Ю.Б., Спасибо за обьяснение!
walaby, Спасибо за вариант!

Все варианты добавил в свою шпаргалку по ВП!

Буду падробнее изучать CODEX.

Достигается упражнениями! 😀

Anonymous
Отправить
Ответ на: