Использование the_excerpt() на странице
Я пытаюсь использовать функцию вывода краткого описания записи, чтобы отобразить последнюю запись блога на главной странице, но ничего не получается. Есть идеи?
<div id="home_news" class="prefix_9 grid_3">
<div id="newsbox" style="display: block;">
<div id="news">
<h2>Добро пожаловать</h2>
<div id="news_content">Добро пожаловать на... Заходите позже, чтобы увидеть новую подборку картин маслом, последние принты и открытки</a>.
<?php
$my_query = new WP_Query('category_name=blog&posts_per_page=1');
while ($my_query->have_posts()) : $my_query->the_post();
$do_not_duplicate = $post->505;
the_excerpt();
endwhile; ?>
</div>
</div>
</div>
</div>
the_excerpt()
не будет работать на целевой странице. Для его работы необходимо использовать внутри цикла записей.
Внутри цикла WordPress заполняет глобальную переменную $post
информацией о текущей записи. Затем различные теговые функции обращаются к этой глобальной переменной и выводят контент.
На основе ваших правок выше...
У вас почти правильно структурирован цикл. Но вместо этого вам нужно:
- Создать собственный запрос для получения последней записи
- Отобразить запись
- Восстановить исходный запрос
Следующий код должен сделать то, что вам нужно:
<div id="home_news" class="prefix_9 grid_3">
<div id="newsbox" style="display: block;">
<div id="news">
<h2>Добро пожаловать</h2>
<div id="news_content">Добро пожаловать на... .заходите позже, чтобы увидеть новую подборку картин маслом, последние печатные издания и открытки</a>.
<?php
// Создаем новый запрос и получаем последнюю запись из категории "blog"
$my_query = new WP_Query( 'category_name=blog&posts_per_page=1' );
// Если есть записи, заполняем глобальные переменные и запускаем цикл
if ( $my_query->have_posts() ) : while ( $my_query->have_posts() ) : $my_query->the_post();
// Выводим анонс записи на странице
the_excerpt();
endwhile; endif;
// Сбрасываем данные основного цикла, чтобы глобальные переменные получили правильные значения
wp_reset_postdata();
?>
</div>
</div>
</div>
</div>

Спасибо за ваш ответ. Можно ли добавить цикл внутри страницы? Я пробовал разные варианты… Пока безрезультатно.

Да. Посмотрите примеры множественных циклов в Codex.

Я отредактировал свой вопрос, потому что не смог добиться правильного отображения markdown в комментарии. Нужно ли указывать post->ID? Является ли ID глобальной именованной переменной?

После вызова the_post()
вы заполняете глобальную переменную $post
, которая содержит элемент ID
.

get_the_ID()
возвращает числовой ID текущей записи при использовании внутри цикла.

Я добавил числовое значение. Безрезультатно. Есть другие идеи? Какие рекомендации по диагностике проблемы?

Смотрите мои правки. Внутри цикла (где у меня используется the_excerpt()
) вы можете использовать любые стандартные теги шаблонов. Если вам нужен числовой ID, используйте get_the_ID()
для его возврата или the_ID()
для его вывода через echo
. Если нужен заголовок, используйте get_the_title()
как обычно.

Теоретически приведенный выше код должен проходить проверку и работать. У меня есть категория с названием 'blog'. Я немного боюсь вносить какие-либо изменения. Я оставил код как есть и вставил его на страницу, но он все равно не отображается. Нужно ли что-то еще сделать?

Глядя на ваш сайт, кажется, что PHP не обрабатывается... поэтому мой вопрос: куда вы вставляете этот код?

OK, поэтому это не работает. PHP-код удаляется в HTML/визуальном редакторе WordPress. Вам нужно либо добавить этот код непосредственно в шаблон страницы, используемый целевой страницей, либо установить плагин для выполнения PHP в WordPress, чтобы встроенный PHP-код работал.

Понял. Почти получилось. Но теперь я столкнулся с другой ошибкой… Идеи? http://www.chazsouthard.com/art/

Опечатка в моём коде (теперь исправлена выше). Должно быть wp_reset_postdata()

Теперь это работает, но конфликтует с CSS. Есть ли способ ограничить количество символов в отрывке? Думаю, это нарушает работу кода.

Почитайте про Управление длиной отрывка с использованием фильтров.

Наконец разобрался. Спасибо, что оставались со мной в процессе. Есть ли способ правильно разместить миниатюру внутри отрывка?

Хотя изначально это было не совсем ясно в вопросе, я думаю, что это может быть хорошим решением. Просто создайте шорткод для размещения анонса в теле статьи. (Это плохая идея, если вам нужно это на каждой странице. Но это хорошая идея, если вы хотите использовать его время от времени в теле некоторых страниц.)
Вот код, который нужно добавить в functions.php:
function the_excerpt_shortcode() {
return get_the_excerpt();
}
add_shortcode( 'the_excerpt', 'the_excerpt_shortcode' );
После того как вы добавили этот код, просто вставьте это в тело страницы:
[the_excerpt]
И всё готово.
Если вы используете Twenty Ten, Twenty Eleven или другую тему, которая подключается к фильтру excerpt_more, вам, возможно, придется изменить этот шорткод, чтобы убрать автоматически добавляемую ссылку "Читать далее...", но для многих тем это не требуется. Рассматривайте это как отправную точку.
