Intereting Posts
Исключить конкретный тег на главной странице Почему я получаю и ошибка от wp_get_attachment_image_src? Как обновить тему с локального хоста на онлайн-сайт Разрешить просмотр экрана редактирования для типа сообщения, но не изменять / сохранять / публиковать / обновлять В чем преимущества API настроек? Как добавить jQuery и скрипт Fancybox для WPF custon для WP Как включить пользовательскую форму оплаты в WordPress? Как включить «обмены» по умолчанию в редакторе меню? Есть ли плагин для получения формы уведомления об удалении DMCA в WordPress? Добавление последней страницы в начало и первую страницу в конец следующей и предыдущей страниц. Функция ссылок Открытые метаданные графика не натягиваются на Facebook до тех пор, пока я не запустил эту конкретную ссылку через отладчик Как вывести изображение или значок для выбранного флажка в специальном сообщении Показывать только родительские атрибуты продуктов на боковой панели Попытка настроить субдомен dev, но url загружается как / dev / вместо загружать пользовательские сообщения в опции выбора (wp_query не работает для более чем одного объекта)

PHP: вводят HTML в тег if / else?

Вот оригинальный сценарий:

<?php if ( ! is_user_logged_in() ) { $args = array( 'redirect' => site_url( '/index.php/portal ' ), 'form_id' => 'loginform-custom', 'label_username' => __( 'Username' ), 'label_password' => __( 'Password' ), 'label_remember' => __( 'Remember Me' ), 'label_log_in' => __( 'Log in' ), 'remember' => true ); wp_login_form( $args ); } else { wp_loginout( index.php/portal() ); } ?> 

Я хотел вставить некоторый HTML в этот скрипт if / else, поэтому я разрезал это так, но я не уверен, правильно ли я сделал это. Он работает, когда я запускаю его, но мне все равно, если все сделано правильно (потому что, к сожалению, работает плохо написанный код).

И вот как я это отрезал.

 <?php if ( ! is_user_logged_in() ) { $args = array( 'redirect' => site_url( '/index.php/portal ' ), 'form_id' => 'loginform-custom', 'label_username' => __( 'Username' ), 'label_password' => __( 'Password' ), 'label_remember' => __( 'Remember Me' ), 'label_log_in' => __( 'Log in' ), 'remember' => true ); wp_login_form( $args ); ?> <p>The portal is for registered users only.</p> <?php } else { wp_loginout( index.php/portal() ); ?> <p>We recommend logging out after each session.</p> <p><a href="/index.php/portal">Continue to portal</a></p> <?php } ?> 

Так я сделал все правильно?

Хорошо написанный, а не рабочий, но плохо написанный код – это отдельный вопрос мнения и вкуса. Существуют различные руководства по стилю, если вам интересно видеть примеры.

Лично в вашем примере выше я бы изменил две вещи: отступы и фигурные скобки.

Я обнаруживаю, что теги open / close php и теги html в шаблонах трудно читать, когда они не выровнены с остальной частью отступа:

 <?php if ( ! is_user_logged_in() ) { $args = array( 'redirect' => site_url( '/index.php/portal ' ), 'form_id' => 'loginform-custom', 'label_username' => __( 'Username' ), 'label_password' => __( 'Password' ), 'label_remember' => __( 'Remember Me' ), 'label_log_in' => __( 'Log in' ), 'remember' => true ); wp_login_form( $args ); ?> <p>The portal is for registered users only.</p> <?php } else { wp_loginout( index.php/portal() ); ?> <p>We recommend logging out after each session.</p> <p><a href="/index.php/portal">Continue to portal</a></p> <?php } ?> 

Это делает его более ясным, что происходит внутри каждого блока if / else. В том же ключе я бы заменил фигурные скобки if / else на двоеточия и теги endif, а также переместил любые теги open / close php на те же строки, что и функциональность php.

 <?php if ( ! is_user_logged_in() ) : ?> <?php $args = array( 'redirect' => site_url( '/index.php/portal ' ), 'form_id' => 'loginform-custom', 'label_username' => __( 'Username' ), 'label_password' => __( 'Password' ), 'label_remember' => __( 'Remember Me' ), 'label_log_in' => __( 'Log in' ), 'remember' => true ); wp_login_form( $args ); ?> <p>The portal is for registered users only.</p> <?php else: ?> <?php wp_loginout( index.php/portal() ); ?> <p>We recommend logging out after each session.</p> <p><a href="/index.php/portal">Continue to portal</a></p> <?php endif; ?> 

Это облегчает просмотр того, какие блоки if / else / end связаны друг с другом, а также попросить дать понять, что такое функциональность php и что такое HTML.

Многострочные php-блоки – это немного запах кода, указывающий логику, которая должна быть помещена в какую-либо функцию или класс в другом месте и указана в одной строке в вашем шаблоне:

 <?php # some other file, maybe have a modules/ or helpers/ directory in your plugin # or theme that contains functions and classes that are used for functionality. function 5south_custom_login_form() { $args = array( 'redirect' => site_url( '/index.php/portal ' ), 'form_id' => 'loginform-custom', 'label_username' => __( 'Username' ), 'label_password' => __( 'Password' ), 'label_remember' => __( 'Remember Me' ), 'label_log_in' => __( 'Log in' ), 'remember' => true ); wp_login_form( $args ); } # your template file <?php if ( ! is_user_logged_in() ) : ?> <?php 5south_custom_login_form() ?> <p>The portal is for registered users only.</p> <?php else: ?> <?php wp_loginout( index.php/portal() ); ?> <p>We recommend logging out after each session.</p> <p><a href="/index.php/portal">Continue to portal</a></p> <?php endif; ?> 

Как правило, я нахожу, что если в файле php if есть более 5-10 строк в блоке шаблона, обычно стоит разбить эту функциональность на отдельный шаблон и включить его в оператор if или else . Это облегчает отслеживание логики шаблона.

Если вы обнаруживаете, что в файлах шаблонов сложены инструкции if / else сложным образом, вероятно, пора переоценить, как загружается файл шаблона, и, возможно, создать функцию или функции для выбора точных шаблонов или частичных шаблонов для каждой конкретной ситуации.

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