Существует ли способ сделать этот вид цикла короче и более хороший?

Вот мой код цикла, я хочу назвать различные шаблоны страницы для различных страниц. Заметьте, что это - один макет страницы.

<?php $args = array( 'post_type' => 'page' );?>  <!-- get only pages -->

<?php query_posts($args); ?>

<?php while (have_posts()) : the_post(); ?>  <!-- loop with pages starts -->

<?php $id = get_the_ID(); ?>  <!-- get post/pageID --> 

<?php   if ($id == 5) : include( get_stylesheet_directory() . '/page_special.php' );

        else: include( get_stylesheet_directory() . '/page_all.php' );

        endif; 
?> 

Было бы возможно измениться if ($id == 5) с is_page или sth как этот?

0
05.05.2013, 04:21
3 ответа

Да, существует несколько улучшений.

  • Напрасно открытие и закрытие тегов PHP являются timewaster, мешают читать и означают больше ввода
  • Синтаксис стиля Высокого звука PHP / короткий синтаксис стиля не собираются играть как приятно с редактором. Используйте {} вместо этого, и Ваш IDE может даже помочь Вам вывести закрывающую фигурную скобку автоволшебно.
  • Query_posts, никогда не используйте его. Нет никакого допустимого варианта использования, который не покрыт WP_Query или фильтром pre_get_posts
  • Не помещать запаздывание?> в конце файла PHP
  • Используйте комментарии PHP не комментарии HTML
  • get_template_part должен использоваться вместо, включают
  • Вы не предприняли попытки сделать очистку после Вашего запроса
  • Вы никогда не проверяли, чтобы видеть, были ли какие-либо страницы найдены вообще
  • Вы используете страницу на свои шаблонные имена, это могло вызвать столкновения с шаблонной иерархией и не может загрузить шаблон, Вы думаете при некоторых обстоятельствах

Так позволяет, начните:

<?php

// grab pages
$args = array( 'post_type' => 'page' );
$query = new WP_Query( $args );

// did we actually find posts?
if ( $query->have_posts() ) {

    // while there are still posts
    while ( $query->have_posts()) {
        // setup the current post data/globals
        $query->the_post();

        // grab its ID
        $id = get_the_ID();
        if ($id == 5) {
            get_template_part( 'page_special' );
        } else {
            get_template_part( 'page_all' );
        }
    }
    // cleanup after ourselves
    wp_reset_postdata();
} else {
    // no pages were found!
}

Теперь, можно использовать get_template_part для дальнейшего расширения этого.

Во-первых, я выгрузил бы это для использования 'содержания', а не 'страницы' как основной идентификатор. Так:

  • page_all.php становится content.php
  • page_special.php становится довольным-special.php

Отметьте использование - не _.

Затем я изменил бы код, который загружает довольное шаблон, как так:

get_template_part( 'content', get_the_ID() );

Если Вы приземлитесь на странице 4, например, то она попытается загрузить содержание-4.php, и если это не будет существовать, то она загрузит content.php. Можно передать в чем-либо, что Вы хотите как второй параметр, и это также посмотрит в дочерних/родительских темах. Свяжите это с пользовательским полем/сообщением meta, и можно расширить его далее

2
19.02.2020, 23:49
  • 1
    Привет Tom! Большое спасибо за Ваше подробное и прокомментировало решение. Мне нравится get_template_part( 'content', get_the_ID() ); часть, потому что я думаю, что это - то, для чего я смотрел. Вы, возможно, заметили, что я - новичок PHP, но Вы дали мне очень хорошие стартовые советы.Спасибо. –  mobsteady 05.05.2013, 11:00
  • 2
    Glad для помощи, если Вы рады им, что могли бы отметить его, как принято? Я сказал бы, что самое важное примечание для выделения является query_posts, оно используется в таком количестве учебных руководств все же, это, может вызвать весь способ проблем, и оно по существу удваивает объем работы, который должен сделать WordPress –  Tom J Nowell♦ 05.05.2013, 15:15

В первую очередь, не использовать query_posts. Проверьте этот вопрос на большее количество информации.

Во-вторых, идентификатор сообщения является, вероятно, не хорошей вещью дифференцироваться на: дублирование таблиц базы данных может легко стать болью в случае процессов разработки нескольких-серверов (т.е. один для dev, дополнительно другой для QA, и один для живого).

Я нашел это наименее хрупким для связи логики с пользовательским полем или чем-то подобным, таким как установка плагина, которая позволяет пользователю указывать страницу ID для показа другого шаблона для.

0
19.02.2020, 23:49
  • 1
    эй dalbaeb! спасибо за ссылку. Я надеюсь, что войду в "вещь запроса" скоро :) –  mobsteady 05.05.2013, 11:02

Я люблю тернарные операторы

$part = ( 5 === (int) get_the_ID() ) ?
  'page_special' : 'page_all';
get_template_part( $part );
0
19.02.2020, 23:49

Теги

Похожие вопросы