Intereting Posts
Архивный комментарий без перемещения к спаму / корзине Динамически сгенерированные параметры настройки WordPress? Как добавить настраиваемое поле к пользовательской таксономии в 4.4 Добавление пользовательской таблицы стилей для BlackBerry Проверка данных конфигурации виджета на странице администратора Прикрепленные сообщения не прилипают к вершине категории Архив загрузка javascript CDN с локальным резервным (не jQuery) Невозможно добавить пункты меню в исходное меню 4 Обновление страницы, чтобы сделать некоторые конкретные вещи get_the_content не работает в цикле? Как я могу уменьшить ширину изображений навалом, которые встроены в сообщения по всему сайту? вставить элемент в элемент меню меню wp WordPress Последнее сообщение с указанием названия Как перезаписывается URL-адрес W3 Total Cache CDN? Альтернатива file_get_contents () для операций с темой

Как получить отрывок для is_home () вне цикла не работает

Я хочу получить мои выдержки за пределами цикла, и я узнал, как все, кроме страницы блога. После изучения этой темы я смог создать два вопроса:

  • Получить отрывок, используя get_the_excerpt вне цикла
  • Используя wp_trim_excerpt, чтобы получить the_excerpt () вне цикла

Поскольку эти два Q & As были несколько лет, я хотел убедиться, что никаких изменений или дополнений к подходу не было, поэтому с дальнейшими исследованиями я смог столкнуться:

  • Как создать сообщение, выходящее за пределы цикла

После прочтения всех источников я смог создать условное:

<?php if ( is_front_page() ) : ?> <meta name="twitter:description" property="og:description" itemprop="description" content="<?php echo wp_kses_post( wp_trim_words( $post->post_content, 30 ) ); ?>" /> <?php elseif ( is_home() ) : ?> <meta property="og:description" content="<?php echo wp_kses_post( wp_trim_words( $post->post_excerpt, 20 ) ); ?>" /> <?php elseif ( is_single() || is_page() ) : if ( empty( $post->post_excerpt ) ) : ?> <meta property="og:description" content="<?php echo wp_kses_post( wp_trim_words( $post->post_content, 20 ) ); ?>" /> <?php else : ?> <meta property="og:description" content="<?php echo wp_kses_post( $post->post_excerpt ); ?>" /> <?php endif; ?> <?php endif; ?> 

Однако, когда я вызываю is_home() он генерирует пустой отрывок: <meta property="og:description" content="" /> . Почему я не могу получить выдержку для страницы блога?

$post global всегда содержит первое сообщение в основном объекте запроса перед циклом ( если ничто не прерывает его до этого ). На особых страницах и статических передних страницах он всегда будет таким же, как и запрошенный объект. На всех архивах, домашней странице и странице блога $post занимает первое сообщение в массиве $posts до цикла и последнего сообщения в массиве $posts после цикла.

Если вам нужно настроить таргетинг на фактический объект страницы на странице блога, вам нужно будет использовать запрошенный объект, а не глобальный $post . В запрошенном объекте будет находиться объект страницы страницы, который использовался как страница, заданная как страница блога. Как я уже говорил, $post будет содержать первое сообщение в цикле.

Вы также должны помнить, что глобальная $post крайне ненадежна, потому что все может ее изменить. Для большей надежности, чтобы получить доступ к объекту страницы на особых страницах (одиночные страницы, истинные страницы и статические передние страницы) или странице блога, используйте get_queried_object() . Если вы ищете еще большую надежность, вы можете использовать $GLOBALS['wp_the_query']->get_queried_object() . Я только недавно ответил на этот вопрос