Использование the_excerpt() на странице

15 мая 2012 г., 00:50:17
Просмотры: 985
Голосов: 0

Я пытаюсь использовать функцию вывода краткого описания записи, чтобы отобразить последнюю запись блога на главной странице, но ничего не получается. Есть идеи?

<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>
0
Все ответы на вопрос 2
19

the_excerpt() не будет работать на целевой странице. Для его работы необходимо использовать внутри цикла записей.

Внутри цикла WordPress заполняет глобальную переменную $post информацией о текущей записи. Затем различные теговые функции обращаются к этой глобальной переменной и выводят контент.


На основе ваших правок выше...

У вас почти правильно структурирован цикл. Но вместо этого вам нужно:

  1. Создать собственный запрос для получения последней записи
  2. Отобразить запись
  3. Восстановить исходный запрос

Следующий код должен сделать то, что вам нужно:

<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>
15 мая 2012 г. 01:16:57
Комментарии

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

Charles Charles
15 мая 2012 г. 16:02:57

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

EAMann EAMann
15 мая 2012 г. 16:41:38

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

Charles Charles
17 мая 2012 г. 02:26:31

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

EAMann EAMann
17 мая 2012 г. 06:46:02

Хорошо – значит, я заменяю ID номером записи?

Charles Charles
17 мая 2012 г. 15:50:31

Как мне найти числовой ID конкретной страницы?

Charles Charles
17 мая 2012 г. 16:01:46

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

EAMann EAMann
17 мая 2012 г. 18:19:23

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

Charles Charles
17 мая 2012 г. 20:22:35

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

EAMann EAMann
17 мая 2012 г. 21:38:38

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

Charles Charles
18 мая 2012 г. 00:53:44

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

EAMann EAMann
18 мая 2012 г. 00:59:01

Я применяю код внутри страницы, в разделе HTML.

Charles Charles
18 мая 2012 г. 17:31:09

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

EAMann EAMann
18 мая 2012 г. 18:34:42

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

Charles Charles
18 мая 2012 г. 21:15:39

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

EAMann EAMann
18 мая 2012 г. 21:16:35

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

Charles Charles
19 мая 2012 г. 17:14:23

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

Charles Charles
20 мая 2012 г. 02:31:40

Нет ... но это не значит, что вы не можете разместить миниатюру + отрывок в шаблоне. Но это отдельный вопрос, поэтому вам действительно стоит задать новый вопрос ...

EAMann EAMann
20 мая 2012 г. 07:02:12
Показать остальные 14 комментариев
0

Хотя изначально это было не совсем ясно в вопросе, я думаю, что это может быть хорошим решением. Просто создайте шорткод для размещения анонса в теле статьи. (Это плохая идея, если вам нужно это на каждой странице. Но это хорошая идея, если вы хотите использовать его время от времени в теле некоторых страниц.)

Вот код, который нужно добавить в 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, вам, возможно, придется изменить этот шорткод, чтобы убрать автоматически добавляемую ссылку "Читать далее...", но для многих тем это не требуется. Рассматривайте это как отправную точку.

18 мая 2012 г. 22:08:53