Intereting Posts
Настройка цикла блога BuddyPress Сниппет: используйте классы вместо встроенных стилей для выравнивания текста Отображение информации на боковой панели Заблокировано / Разблокировано в заголовке Отправлять письмо с подтверждением при обновлении роли пользователя Есть ли способ установить единственные / множественные метки для имен терминов таксономии? WordPress Постоянная ссылка Проблема 404 Изменения постоянной константы по умолчанию Что такое экземпляр wordpress Страница 404 не найдена только для одного сообщения Откройте кнопку «Просмотр страницы» в редакторе в новой вкладке нежелательные теги P в shortcode, задержка wpautop не работает Как настроить wp-login.php только для пользователей, которые устанавливают пароль в первый раз? Как можно создать пост после 1 года Как добавить таблицу AJAX в PHP, данные которой вызывается через API

Почему get_post_meta не работает со страницей сообщений?

Поиск причины, по которой get_post_meta() не работает с home.php . Из моего чтения я понимаю, что это шаблон, а не почта или страница, за « Пользовательские поля не отображаются на моей странице блога ». Ближайшей страницей, которую я смог найти из поиска, было: « поля get_post_meta не отображаются на странице сообщений », но, увы, ответ не вникает в детали, почему. Я закодировал пользовательский мета-ящик, он работает, для front_page.php и всех пользовательских типов сообщений, но не внутри home.php . Я использую условный is_home() и он работает, но кажется, что get_the_ID() не делает, код:

 if ( is_home() ) { // variables $check_meta = get_post_meta( get_the_ID(), 'checkbox', true ); $header_meta = get_post_meta( get_the_ID(), 'header', true ); $textarea_meta = get_post_meta( get_the_ID(), 'textarea', true ); // condition if ( ( $check_meta == 'yes' ) && !empty( $textarea_meta ) && !empty( $header_meta ) ) { // code } } 

Почему get_the_ID() не работает с get_post_meta() в home.php расположенном в header.php ?


Редактировать:

По комментариям я думал, что я отредактирую этот вопрос, чтобы помочь кому-то еще в будущем. Я устанавливаю первую страницу и страницу сообщений в Settings -> Reading . is_home() работает в моем условии is_home() :

 $check_meta = get_post_meta( get_queried_object_id(), 'checkbox', true ); $header_meta = get_post_meta( get_queried_object_id(), 'header', true ); $textarea_meta = get_post_meta( get_queried_object_id(), 'textarea', true ); 

Если ваша страница сообщений является статической страницей, выбранной в разделе «Настройки»> «Чтение»> « Первая страница» , то get_queried_object_id() вернет идентификатор для этой страницы, который вы можете использовать для извлечения метаданных.

 $check_meta = get_post_meta( get_queried_object_id(), 'checkbox', true ); $header_meta = get_post_meta( get_queried_object_id(), 'header', true ); $textarea_meta = get_post_meta( get_queried_object_id(), 'textarea', true ); 

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

get_the_ID() использует get_post() который использует $post global для возврата идентификатора сообщения или страницы. Внутри цикла глобальный the_post() $post всегда будет установлен на то, что текущее сообщение зацикливается через the_post() .

Вне цикла, в основном запросе, перед циклом, глобальное значение $post будет автоматически установлено и удерживает пост-пост первого сообщения в запросе. Вы можете проверить это с помощью var_dump( $post ); , Глобальный the_post() $post будет установлен на последнее сообщение в запросе, если он установлен после запуска цикла ( поскольку the_post() изменило значение ).

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

На страницах архива также нет метаданных, поскольку они не являются сообщениями или страницами, и у них нет идентификаторов.

Короче говоря, get_the_ID() всегда будет возвращать false ( если $post никогда не будет пустым ) или идентификатор первого или последнего сообщения в запросе вне цикла на любой странице архива

Чтобы использовать get_post_meta() вам нужно иметь идентификатор сообщения. Это ваши варианты:

  1. Задайте почтовый идентификатор вручную
  2. Запустите свой код в цикле и get_the_ID() обычно loop.php
  3. Запускайте свой код на одной странице или обычно публикуйте файл page.php или single.php

Расширение ответа с использованием темы TwentyFifteen:

  1. Открыть index.php
  2. Найдите код цикла, начиная с while ( have_posts() ) : the_post();
  3. Вставьте код после кода на шаге 2, $meta = get_post_meta( get_the_ID() );