Поиск причины, по которой 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()
вам нужно иметь идентификатор сообщения. Это ваши варианты:
get_the_ID()
обычно loop.php Расширение ответа с использованием темы TwentyFifteen:
while ( have_posts() ) : the_post();
$meta = get_post_meta( get_the_ID() );