Установка глобальной переменной $post с указанным ID для использования тегов шаблона

10 окт. 2011 г., 15:19:57
Просмотры: 36.3K
Голосов: 27

У меня есть функция, которая получает ID записей очень специфическим способом.

Мне нужно иметь возможность установить global $post, чтобы использовать функции вроде the_content(), которая не принимает ID в качестве параметра.

Как я могу это сделать?

1
Комментарии

Что именно вы имеете в виду под "установить глобальную переменную $post"? Не могли бы вы: а) опубликовать функцию, получающую ID, и проиллюстрировать/набросать ваш вариант использования?

kaiser kaiser
10 окт. 2011 г. 16:21:28
Все ответы на вопрос 4
0
44

Когда вы проходите по циклу, добавьте это:

global $post; 
$post = get_post( $ID, OBJECT );
setup_postdata( $post );

//Делаем что-то

wp_reset_postdata();
28 мая 2012 г. 09:36:02
0

Для работы с записями вне цикла попробуйте использовать:

get_post(post_id)

чтобы получить запись с определённым ID вне стандартного цикла WordPress. Когда вы используете эту функцию, глобальный объект $post будет содержать выбранную вами запись. Теперь вы можете получить содержимое записи с помощью:

$post->post_content

Подробнее в документации get_post на WordPress Codex

11 окт. 2011 г. 06:58:35
0

Вы можете использовать однострочное выражение для сброса глобального объекта поста.

setup_postdata( $GLOBALS['post'] =& $custom_post_object );

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

wp_reset_postdata();

Примечание: PHPCS со стандартами WordPress будет выдавать предупреждение о переопределении глобального поста, поэтому если вы используете стандарты WordPress, вам нужно отключить проверку для этой строки следующим образом:

setup_postdata( $GLOBALS['post'] =& $post ); //phpcs:ignore
29 июл. 2021 г. 19:59:03
0

Решение, которое работает для меня:

  1. global $post; перед циклом
  2. setup_postdata($post); внутри цикла
  3. wp_reset_postdata(); после цикла

Учтите, что имя переменной должно быть $post

9 окт. 2021 г. 21:52:06