WordPress как на ладони
wordpress jino

get_post() WP 1.5.1

Получает запись (пост) по переданному ID и возвращает данные из базы данных. Тип записи может быть любой: вложение, пост, страница, произвольный тип. Если запись не указана, получит текущую запись.

✈ 1 раз = 0.000185с = быстро | 50000 раз = 0.19с = очень быстро PHP 7.1.0, WP 4.7

Хуков нет.

Возвращает

WP_Post/null. Объект WP_Post, если удалось получить запись и null, при неудаче.

Использование

get_post( $id, $output, $filter );
$id(число/массив/объект)
ID поста, данные которого нужно получить. По умолчанию будет получен текущий пост.
По умолчанию: null
$output(строка)

Флаг обозначающий в каком виде вернуть данные, может быть:

  • OBJECT - данные вернутся в виде объекта
  • ARRAY_A - данные вернутся в виде ассоциативного массива
  • ARRAY_N - данные вернутся в виде простого массива (без ключей)

По умолчанию: OBJECT

$filter(строка)
Как фильтровать пост. Смотрите описание функции sanitize_post_field() для полного списка значений.
По умолчанию: raw

Примеры

Получаем данные поста с идентификатором 7 и получаем заголовок записи:

$post_id_7 = get_post( 7 );
$title = $post_id_7->post_title;

Получаем данные поста 7 в виде ассоциативного массива и "вытаскиваем" заголовок из массива:

$post_id_7 = get_post( 7, ARRAY_A);
$title = $post_id_7['post_title'];

Возвращаемые данные

ID(число)
Идентификатор записи.
post_author(число)
Идентификатор автора записи.
post_date(строка)
Дата записи в формате YYYY-MM-DD HH:MM:SS (с учетом исправления времени).
post_date_gmt(строка)
Дата записи в формате YYYY-MM-DD HH:MM:SS (время по Гринвичу (GMT)).
post_content(строка)
Текст записи.
post_title(строка)
Заголовок записи.
post_excerpt(строка)
Цитата записи.
post_status(строка)
Статут записи, может быть: publish|pending|draft|private|static|object|attachment|inherit|future|trash.
comment_status(строка)
Возможность комментирования для записи, может быть: open|closed|registered_only.
ping_status(строка)
Статус пингов/трэкбэков, может быть: open|closed.
post_password(строка)
Пароль записи.
post_name(строка)
Имя записи (слаг). Название которое обычно используется в УРЛ-е.
to_ping(строка)
УРЛ-ы из статьи, на которые нужно отправить уведомления при обновлении поста.
pinged(строка)
УРЛ-ы из статьи, которые уже получили уведомления.
post_modified(строка)
Дата изменения записи в формате YYYY-MM-DD HH:MM:SS (с учетом корректировки времени).
post_modified_gmt(число/строка)
Дата изменения записи в формате YYYY-MM-DD HH:MM:SS (время по Гринвичу (GMT)).
post_parent(число)
ID родительской страницы (отлично от нуля у прикрепленных типов записей).
guid(строка)
Ссылка на запись. Важно: использовать этот параметр в качестве постоянной ссылки для поста неправильно, если версия вашего WordPress выше 2.5. Это уникальный идентификатор записи, который позднее стал ссылкой на запись.
menu_order(число)
Порядковый номер для построения меню (используется для постоянных страниц).
post_type(строка)
Тип записи (post|page|attachment).
post_mime_type(строка)
Миме тип записи (jpg|png|zip|pdf и т.д.). Используется для прикрепленных записей.
comment_count(число)
Количество комментариев у записи.

Заметки

До версии 3.5 первый параметр мог получать только переменную, прямая передача числа вызывала ошибку:

//  Верно: передаем переменную, а не число
$post_id = 7;
$the_post = get_post( $post_id );

//  Неверно (вызовет ошибку): передаем число, а не переменную
$the_post = get_post( 7 );

C 3.5 это не так - можно передавать число.

Код get post: wp-includes/post.php WP 4.9

<?php
function get_post( $post = null, $output = OBJECT, $filter = 'raw' ) {
	if ( empty( $post ) && isset( $GLOBALS['post'] ) )
		$post = $GLOBALS['post'];

	if ( $post instanceof WP_Post ) {
		$_post = $post;
	} elseif ( is_object( $post ) ) {
		if ( empty( $post->filter ) ) {
			$_post = sanitize_post( $post, 'raw' );
			$_post = new WP_Post( $_post );
		} elseif ( 'raw' == $post->filter ) {
			$_post = new WP_Post( $post );
		} else {
			$_post = WP_Post::get_instance( $post->ID );
		}
	} else {
		$_post = WP_Post::get_instance( $post );
	}

	if ( ! $_post )
		return null;

	$_post = $_post->filter( $filter );

	if ( $output == ARRAY_A )
		return $_post->to_array();
	elseif ( $output == ARRAY_N )
		return array_values( $_post->to_array() );

	return $_post;
}

Cвязанные функции

Из раздела: Запросы

get_post 11 комментариев
Полезные 1 Все
  • Mark

    Отличный сайтец, спасибо за подробную документацию!

    2
    Ответить2.2 года назад #
  • Сергей cайт: moytop.com

    Спасибо!
    Только почему-то при использовании echo get_post_field('post_content', 262);
    текст идет сплошным, без абзацев, может подскажете, почему так получается?

    Ответить2.2 года назад #
  • Артём

    Чем 'post_content_filtered' отличается от 'post_content'?

    Ответить2 года назад #
    • Kama4660

      Там хранится временный контент... WordPress не использует это поле вообще, оно для плагинов. Оно устанавливается как пустое при каждом обновлении записи, кроме случаев, когда оно не указано. Т.е. если при обновлении записи это поле указано, оно будет записано, но если при другом обновлении оно не указано, оно сотрется.

      Развернутый ответ на эту тему тут (англ): http://wordpress.stackexchange.com/questions/113387/when-is-the-post-content-filtered-column-in-database-cleared-by-wordpress

      Ответить2 года назад #
  • А из get_post() получить тизер нереально? только вручную форматировать уже полученный post_content?
    З.Ы. Давно хотел поблагодарить автора портала, огромное Вам спасибо! thank_you

    1
    Ответить1.5 года назад #
    • Kama4660

      Да думаю только так, правда немного непонятно: получить тизер - это что значит в вашем случае?

      Ответить1.5 года назад #
      • Да похоже, что я имею ввиду именно цитату... Мне фактически нужен текст обрезанный тегом !--more--, однако $post_id->post_excerpt выдает пустоту.
        Отчаявшись решил пойти в обход $post_excerpt = get_the_excerpt( $id ); и вариант меня вполне удовлетворил на локальной машине... пока не перенес на сервер, там работающий код работать отказался снова поздравив меня пустотой...
        Отмечу, что $post_id->post_content, заголовок, урл поста отрабатывает как надо. Что делать unknw

        Ответить1.5 года назад #
        • Шамиль @

          Та же ситуация и у меня. Решили да проблему?

          -1
          Ответить1.1 года назад #
        • Fobos

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

          1

Здравствуйте, !

Ваш комментарий