Как получить контент конкретной страницы в WordPress
Ниже мой код, который работает, но проблема в том, что он не выводит HTML-теги... такие как и т.д... не понимаю почему...
<?php $recent = new WP_Query("page_id=2"); while($recent->have_posts()) : $recent->the_post();?>
<?php
echo substr(get_the_excerpt(), 0,450); // Выводим первые 450 символов краткого описания
?>
<a href="<?php the_permalink() ?>" rel="bookmark">
Подробнее о нас
</a>
Ниже другой код, где HTML-теги и все остальное работает правильно... но я не могу понять, как сделать там рабочую постоянную ссылку... та ссылка, которую я вставил, не работает.
<?php
$my_id = 2;
$page_id = get_post($my_id);
$content = $page_id->post_content; // Получаем контент страницы
echo substr($content, 0, 450); // Выводим первые 450 символов
?>
<a href="<?php the_permalink() ?>" >Подробнее о нас</a>
Также, какой лучший способ получить контент конкретной страницы, как показано ниже:
<h2>заголовок</h2>
<div>изображение записи </div>
<div>контент</div>
<a href="<?php the_permalink() ?>" rel="bookmark">
Вместо вызова WP_Query()
можно использовать get_post()
и "настроить" global $post
. Это, вероятно, немного эффективнее, чем ответ @tf, хотя идеи в целом схожи.
Обратите внимание: в обоих случаях следует сбросить данные поста после использования.
/**
* Отображает содержимое поста. Дополнительно позволяет передать ID поста.
* @uses the_content()
*
* @param int $id Необязательный. ID поста.
* @param string $more_link_text Необязательный. Текст для ссылки "Читать далее".
* @param bool $stripteaser Необязательный. Удалять тизер перед текстом "Читать далее". По умолчанию false.
*/
function sh_the_content_by_id( $post_id=0, $more_link_text = null, $stripteaser = false ){
global $post;
$post = &get_post($post_id);
setup_postdata( $post, $more_link_text, $stripteaser );
the_content();
wp_reset_postdata();
}

Что ж, логика не моя - я просто взял то, что было в вопросе, и немного улучшил. ;) Если речь идет всего об одном посте, который вас интересует, вы, конечно, правы - лучше использовать get_post
. Однако, поскольку изначально там был цикл, я оставил его как есть.

(get_)the_excerpt()
удаляет HTML-теги — именно поэтому у вас нет HTML-тегов. ;)
Просто используйте the_content()
вместо the_excerpt()
, если хотите отобразить полное содержимое.
$recent = new WP_Query("page_id=2");
while ($recent->have_posts()) : $recent->the_post();
echo '<a href="'.get_the_permalink().'" rel="bookmark">Постоянная ссылка</a>';
the_content();
endwhile;
wp_reset_postdata();
Что касается наилучшего способа вывода данных записи, вам стоит взглянуть сюда.
