Произвольное поле за пределами цикла
Недавно столкнулся с ситуацией, когда нужно было в сайдбаре получить значение произвольного поля текущего поста. Оказалось, что стандартным способом получить его можно только в пределах цикла поста.
Для того же, чтобы вывести произвольное поле за пределами цикла текущего поста, необходимо воспользоваться одним из следующих вариантов.
Первый вариант
-
В файле
single.phpнайти код начала цикла:<?php if (have_posts()) : while (have_posts()) : the_post(); ?>
и сразу после него добавить такой код:
<?php $GLOBALS['current_id'] = $post->ID; ?>
В результате этого ID (идентификатор) поста станет доступным за пределами цикла (идентификатор нужен нам для считывания произвольного поля).
-
Теперь, чтобы получить произвольное поле текущего поста за пределами цикла, необходимо использовать следующий код:
<?php echo get_post_meta($GLOBALS['current_id'], 'customField', true); ?>
Здесь
customField– это имя произвольного поля.
Второй вариант
Этот вариант более простой и красивый по сравнению с первым. Достаточно вставить вот такой код в нужное место:
<?php global $wp_query; $postid = $wp_query->post->ID; echo get_post_meta($postid, 'customField', true); ?>
customField – это имя произвольного поля.
Спасибо. То, что нужно было. Правда, я использовала этот хак, чтобы вывести для первого поста данные, отличные от остальных постов. Но сути это не меняет :)
А еще, можно вызывать все элементы шаблона, не через стандартные get_header(), а через require (’header.php’);. В таком случает весь шаблон получается, как бы цельным и все переменные становятся доступны в любом файле шаблона.
Ну это скорее для информации. Если шаблон уже готовый, то примеры из поста конечно удобнее. :)
Не знал об этой особенности. Надо как-то запомнить. Спасибо за подсказку.
require (TEMPLATEPATH.’/header.php’);
А вообще, подключать файлы шаблона таким образом не рекомендуется, поскольку некоторые плагины могу вешать хуки на get_herader и get_footer теоретически
Пользуюсь вторым вариантом, но первый будет работать быстрее?
Без понятия, какой быстрее.
Помогите плиз.. Делаю условие в плагине, чтобы он работал только на отдельных станицах(например 29, 800 и 1000) , для этого необходимо получить ID текущей страницы, чтобы сравнить их. Так вот указанные выше фишки и просто the_iD не пашут.
Чтож делать?