Получить содержимое записи по ID

6 янв. 2016 г., 08:37:49
Просмотры: 61.1K
Голосов: 10

Как я могу получить содержимое записи по ID поста? Я пробовал использовать get_page('ID'); для отображения содержимого, но это не работает.

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

Минусую, потому что вы даже не попытались прочитать документацию по get_page(). Эта функция была объявлена устаревшей очень давно. Кроме того, на сайте есть бесчисленное количество материалов по этой проблеме, даже в Google можно найти массу информации на эту тему

Pieter Goosen Pieter Goosen
6 янв. 2016 г. 09:25:19
Все ответы на вопрос 4
4
19

Это можно сделать несколькими способами. Вот два лучших варианта.

$post_id = 5// пример ID записи
$post_content = get_post($post_id);
$content = $post_content->post_content;
echo do_shortcode( $content );// выполнение шорткодов

Другой метод

$content = get_post_field('post_content', $post_id);
echo do_shortcode( $content );// выполнение шорткодов

После предложения Pieter Goosen об использовании apply_filters.

Вы можете использовать apply_filters, если хотите, чтобы контент фильтровался другими плагинами. Таким образом, отпадает необходимость использовать do_shortcode.

Пример

$post_id = 5// пример ID записи
$post_content = get_post($post_id);
$content = $post_content->post_content;
echo apply_filters('the_content',$content);
 //нет необходимости использовать do_shortcode, но контент может быть отфильтрован другими плагинами.

Если вы не хотите позволять другим плагинам фильтровать этот контент и вам нужна функция шорткода, то используйте do_shortcode.

Если вам не нужны и шорткоды, то просто работайте напрямую с post_content.

6 янв. 2016 г. 08:58:42
Комментарии

Просто интересно, почему вы используете do_shortcode

Pieter Goosen Pieter Goosen
6 янв. 2016 г. 09:25:56

Привет, спасибо за вопрос. @PieterGoosen Так как мы получаем сырой контент записи. Любые шорткоды, встроенные в запись, не будут обработаны. Поэтому мы делаем это самостоятельно с помощью do_shortcode

WPTC-Troop WPTC-Troop
6 янв. 2016 г. 09:36:52

Лучшим решением было бы использовать apply_filters( 'the_content', $content );, таким образом все фильтры, применяемые к the_content(), такие как wpautop и обработчик шорткодов, будут применены к $content. ;-). Обратите внимание на множественное число filters

Pieter Goosen Pieter Goosen
6 янв. 2016 г. 09:59:43

Да, использование apply_filters вместо do_shortcode имеет смысл. Однако выбор apply_filter полностью зависит от решения их среды разработки. Позвольте мне также обновить мой ответ. Большое спасибо за вашу заботу о сообществе @PieterGoosen

WPTC-Troop WPTC-Troop
6 янв. 2016 г. 11:04:15
0

Оставлю здесь еще один нестандартный и некрасивый способ, который иногда может оказаться полезным. Конечно, предпочтительнее использовать методы с API-вызовами (get_post(), get_the_content(), ...).

global $wpdb;
$post_id = 123; // укажите нужный ID записи
$post_content_raw = $wpdb->get_var(
    $wpdb->prepare(
        "select post_content from $wpdb->posts where ID = %d",
        $post_id
    )
);
19 нояб. 2016 г. 12:32:50
1
$id = 23; // добавьте ID страницы, где находится ноль
$p = get_page($id);
$t = $p->post_title;
echo '<h3>'.apply_filters('post_title', $t).'</h3>'; // заголовок здесь обернут в h3
echo apply_filters('the_content', $p->post_content);
19 янв. 2018 г. 08:28:45
Комментарии

Пожалуйста, [отредактируйте] ваш ответ и добавьте объяснение: почему это может решить проблему?

fuxia fuxia
19 янв. 2018 г. 08:30:13
1
-1

Используя функцию get_page('ID').

$page_id = 123;  // ID страницы
$page_data = get_page($page_id); 
$title = $page_data->post_title; 
$content = $page_data->post_content;
6 янв. 2016 г. 09:26:10
Комментарии

Минусую, потому что вы даже не попытались прочитать документацию. get_page() устарел

Pieter Goosen Pieter Goosen
6 янв. 2016 г. 09:27:38