Вопрос или проблема
Как напечатать содержимое страниц в области фронтенда.
Я новичок в WordPress и пытаюсь создать сайт. Мне необходимо отображать содержимое страниц, когда кликаются соответствующие пункты меню. Мой page.php содержит
<?php while ( have_posts() ) : the_post();
$page_data = $post->ID;
if($page_data == '116')
{
?>
<center><b><h2>ДОБРО ПОЖАЛОВАТЬ В КЛИНИКУ!!</h2></b></center>
<?php
}
else {
?>
<h1 class="entry-title"><?php the_title(); ?></h1>
<?php
the_content();
}
endwhile; ?>
Но мое содержимое не отображается. Заголовок отображается нормально. В чем ошибка в коде? Пожалуйста, помогите мне.
Ваш код в порядке, однако основная ошибка заключается в том, что страница #116 не существует на вашем сайте WP, поэтому главная или домашняя страница не отображает никаких данных. Обычно, чтобы избежать использования ID страницы, я использую код if (is_page('имя-страницы')) {?>
Иногда это лучше, чем ID страницы, потому что номер ID не всегда одинаков на новой установке WP, просто помните, что нужно настроить постоянные ссылки на красивый формат, используя /%permalinks%/
Возможно, проблема в том, что либо (1) the_content()
фильтруется так, что ничего не показывается, либо (2), что содержимое отправляется на веб-страницу, но что-то его скрывает.
Сначала убедитесь, что есть содержимое для отображения:
} else {
?>
<h1 class="entry-title"><?php the_title(); ?></h1>
<?php
echo 'Перед содержимым';
echo $post->post_content;
echo 'После содержимого';
}
Если ничего не скрывает содержимое (например, JavaScript или CSS), оно должно отображаться на странице между Перед содержимым и После содержимого. Если нет, дважды проверьте, взглянув на исходный код веб-страницы, чтобы увидеть, было ли что-то добавлено в этой части.
Если оно отображается, замените echo $post->post_content;
на the_content()
и обновите страницу. Если содержимое фильтруется, скорее всего, это происходит на фильтре the_content
. Попробуйте удалить эти функции фильтров:
} else {
?>
<h1 class="entry-title"><?php the_title(); ?></h1>
<?php
remove_all_filters( 'the_content' );
echo 'Перед содержимым';
the_content();
echo 'После содержимого';
}
Теперь содержимое отображается? Если да, значит, в файлах темы или плагинов есть фильтр, который удаляет содержимое перед его отображением.
На практике вам следует найти этот код и отключить его (возможно), удалив этот проблемный фильтр. remove_all_filters()
– это крайний вариант. Он может удалить фильтры, которые вам нужны. Например, фильтры, добавляющие кнопки социальных сетей или полезные ссылки.
Я сделал это, используя $post->post_content; это напрямую получает и отображает данные из базы данных. Это работает идеально для меня.
Ответ или решение
Конечно! Давайте разберемся с вашей задачей по правильному отображению контента страниц в WordPress.
Ваш текущий код выглядит неплохо, однако проблема может быть связана с тем, что страница с идентификатором 116 не существует, или с тем, что функция the_content()
не выводит контент по другой причине. Вот несколько шагов, которые помогут вам решить вашу проблему.
1. Проверьте существование страницы
Первое, что нужно сделать — убедиться, что страница с ID 116 действительно существует на вашем сайте. Это можно проверить в админке WordPress:
- Перейдите в раздел "Страницы".
- Найдите нужную страницу и проверьте её ID.
Если страница отсутствует, вам стоит использовать название страницы вместо ID. Например, вместо
if($page_data=='116')
можно сделать так:
if (is_page('название-страницы'))
2. Вывод контента
Ваш код для вывода заголовка и контента выглядит правильно. Обратите внимание, что функция the_content()
может не показывать контент по нескольким причинам, например, из-за фильтров. Для начала попробуйте вывести контент напрямую:
else {
?>
<h1 class="entry-title"><?php the_title(); ?></h1>
<?php
echo 'Перед контентом';
echo $post->post_content; // Прямой доступ к контенту
echo 'После контента';
}
Если контент отображается между "Перед контентом" и "После контента", значит, с the_content()
что-то не так.
3. Проверка фильтров
Если вы видите контент с использованием $post->post_content
, но не можете его вывести с помощью the_content()
, возможно, какие-то фильтры на the_content
блокируют отображение. Вы можете временно убрать все фильтры для тестирования:
else {
?>
<h1 class="entry-title"><?php the_title(); ?></h1>
<?php
remove_all_filters('the_content'); // Удаляем все фильтры
echo 'Перед контентом';
the_content(); // Пытаемся отобразить контент
echo 'После контента';
}
Если это сработает, значит, какой-то фильтр конфликтует с нормальным выводом контента. Вам стоит изучить код вашей темы и любых установленных плагинов на наличие add_filter()
для the_content
.
Заключение
Если все вышеупомянутое не помогает, напоминаю, что вы всегда можете обратиться к исходному коду темы или задать вопросы на форумах, где обсуждаются разработки на WordPress. Ваш подход с использованием $post->post_content
также является допустимым и эффективным способом в случае, если все другие методы не сработали.
Надеюсь, эти советы помогут вам успешно отобразить контент страниц на вашем сайте!