Почему не отображается the_content на статической главной странице WordPress

2 апр. 2013 г., 03:51:42
Просмотры: 17.3K
Голосов: 3

Должно быть, я делаю что-то не так.

Я настроил свой сайт со статической главной страницей, используя front-page.php. В админке я создал страницу с заголовком и выбрал front-page.php в выпадающем списке шаблонов.

Мой заголовок отображается нормально, однако the_content(); нет.

Я не делаю ничего особенного, как показано ниже.

<?php
/*
Шаблон: Главная страница
*/ ?>
<?php get_header(); ?>
<div class="content">
<div class="welcome_area">
<div class="welcome_area_title"><?php the_title('');?></div>
<div class="welcome_area_text">
<?php the_content(); ?>
</div>

Есть идеи, почему контент не отображается?

0
Все ответы на вопрос 2
3
10

У вас на самом деле нет цикла (Loop).

<?php get_header(); ?>
<div class="content">
<div class="welcome_area">
<div class="welcome_area_title"><?php the_title('');?></div>
<div class="welcome_area_text"><?php 
if (have_posts()) {
  while (have_posts()) {
    the_post();
    the_content(); 
  }
} ?>

Что происходит:

  1. Вы используете have_posts() для проверки наличия контента записи. При необходимости можно добавить блок else для вывода контента по умолчанию.
  2. Вы проходите по контенту в цикле с помощью while(have_posts())
  3. Вы вызываете the_post() для настройки переменной $post и инкремента счетчика цикла. Если не вызывать the_post(), получите бесконечный цикл. Это самая важная часть, которой не хватало в вашем коде.
  4. После выполнения the_post(), теги шаблона записи должны работать как ожидается.

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

Ссылки

https://codex.wordpress.org/Class_Reference/WP_Query#Methods

2 апр. 2013 г. 04:03:26
Комментарии

Какая глупая ошибка. Не могу поверить, что я это упустил, день был долгим. Спасибо, что заметили.

dragonfeet2012 dragonfeet2012
2 апр. 2013 г. 18:41:55

Вам действительно не нужно использовать have_posts() в front-page.php; front-page.php будет использоваться только если есть запись для отображения. Так что вы можете просто вставить the_post() и убрать операторы if и while.

micheal65536 micheal65536
19 янв. 2016 г. 22:54:21

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

s_ha_dum s_ha_dum
19 янв. 2016 г. 23:11:09
0

Прежде всего, если вы установили свою страницу как статическую главную страницу, вам не нужно связывать шаблон с этой страницей, и шаблону не нужен заголовок. WordPress автоматически использует шаблон front-page.php для статической главной страницы, согласно иерархии шаблонов.

Чтобы ответить на ваш вопрос: сначала вам нужно вызвать the_post(), чтобы установить глобальные переменные, от которых зависит функция the_content().

2 апр. 2013 г. 04:02:56