Wordpress просматривая сообщения - PullRequest
0 голосов
/ 24 марта 2019

Интересно, может ли кто-нибудь объяснить следующее: я следую учебному пособию по WordPress, я вижу, что этот код используется для циклического просмотра поста и его отображения, однако я немного запутался в том, что на самом деле здесь происходит.

<?php 
if( have_posts() ):
    while( have_posts() ): the_post(); ?>
        <h3><?php the_title(); ?></h3>
        <p><?php the_content(); ?></p>
    <?php endwhile;     
endif;
?>

Конкретный раздел, который меня касается, это while( have_posts() ): the_post(); ?>

Итак, во-первых, здесь синтаксис не тот, который я видел раньше, у вас есть скобки цикла while, которые открываются и закрываются, а затеместь : the post() что это за вторая часть?Я думаю, что условие для цикла while должно быть внутри while().Что это за : the_post() что он делает?

также, метод have_posts() возвращает true, если есть сообщения, я не понимаю, почему это не бесконечный цикл, так как, конечно, have_posts()всегда будет верным, пока в базе данных есть хотя бы один пост.

наконец, мне нравится использовать короткие теги PHP, теперь, когда я это делаю, этот код больше не работает, вот моя версия этогокод с короткими тегами, может кто-нибудь показать мне, где я иду не так.

<? if ( have_posts() ): ?>
    <? while ( have_posts() ) : the_post(): ?>
        <h3><?php the_title(); ?></h3>
        <p><?php the_content(); ?></p>
    <? endwhile; ?>
<? endif; ?>

PHP шторм выделяет последние : в <? while ( have_posts() ) : the_post(): ?> as the error, but if I change it to a; `я получаю следующую ошибку

Warning: count(): Parameter must be an array or an object that implements Countable in C:\laragon\www\blog\wp-includes\post-template.php on line 293

Я понимаю, что здесь есть пара вопросов, я прошу прощения, я просто хочу полностью понять, что на самом деле происходит здесь, а не просто слепо копировать и вставлять.Надеюсь, вы понимаете.

Заранее спасибо.

1 Ответ

0 голосов
/ 25 марта 2019

1) Синтаксис цикла Loop

Используемый синтаксис является альтернативным способом создания «структур управления» в PHP, как описано здесь: https://www.php.net/manual/en/control-structures.alternative-syntax.php

По сути, это альтернативный способ написания следующего:

while (have_posts()) {
    the_post();
    ?>
    <h3><?php the_title(); ?></h3>
    <p><?php the_content(); ?></p>
    <?php
}

Нет разницы в том, как функционирует код, просто иногда проще сопоставить, чем использовать фигурные скобки

2.have_posts() и the_post()

Вы правы в том, что это будет возвращать true, если есть сообщения, но это вызов функции the_post(), который останавливает ее от бесконечного зацикливания.the_post() установит все переменные, необходимые для доступа к данным поста (например, глобальная переменная $post), и увеличит счетчик на 1. Что это значит, если у вас есть только один постявляется то, что второй вызов have_posts теперь будет возвращать значение false, поскольку счетчик равен количеству доступных сообщений.

3.Короткие теги PHP

Я полагаю, это потому, что ваш сервер не настроен на использование коротких тегов.Вам нужно включить настройки short_open_tag в вашей конфигурации php.ini.https://www.php.net/manual/en/ini.core.php#ini.short-open-tag

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...