Как получить шаблон страницы / публикации

#wordpress #templates #post

#wordpress #шаблоны #Публикация

Вопрос:

Я пытаюсь добавить пользовательские разделы в свою индексную страницу, и я создал несколько шаблонов страниц, которые я думал использовать как способ отфильтровать страницы. Таким образом, в основном, если в сообщении используется «Медиа-шаблон», он будет отображаться в этом div.

Но я изо всех сил пытаюсь написать правильный php-код, который бы перебирал все сообщения и находил сообщение, использующее этот шаблон.

В конце я хочу найти сообщение / страницу, которая использует «Медиа-шаблон», и опубликовать его содержимое в folowwing div:

     <div class="home-media-content col-sm-3 px-1 pb-2">
        <div class="embed-responsive embed-responsive-16by9">

        <?php  

            $pages = get_pages(); 
            foreach ($pages as $page) {
                echo $page->post_title; //Posting just for the test
                echo $page->template; //SHOULD GET THE TEMPLATE and if the template name is 'Media template' display post content


            }
        ?>


        </div>
    </div>
  

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

Ответ №1:

Отредактировано для использования WP_Query

Смотрите ниже, как я бы это сделал, используя функции setup_postdata() and get_page_template() . Я думаю, вы должны иметь возможность получать эту информацию из '_wp_page_template' meta для каждой страницы, если вы не хотите настраивать postdata, но если вы все равно собираетесь выполнять правильный цикл, то последнее, вероятно, проще всего.

 <div class="home-media-content col-sm-3 px-1 pb-2">
    <div class="embed-responsive embed-responsive-16by9">

        <?php

        $my_query = new WP_Query(
            array(
                'post_status' => 'publish',
                'post_type'   => 'page',
            )
        );


        if ( $my_query->have_posts() ) {
            while ( $my_query->have_posts() ) {
                $my_query->the_post();

                  the_title(); // Posting just for the test

                if ( get_page_template() === 'media-template.php' ) { // This needs to be the file slug rather than template name
                      do_something();
                } else {
                        do_something_else();
                }
            }
        }

            wp_reset_postdata(); // Reset postdata back to normal

        ?>


    </div>
</div>
  

Комментарии:

1. похоже, это не работает. он даже печатает уже не заголовки страниц, а что-то другое. и я сам нашел эту функцию до [ get_page_template() ], но я не смог заставить ее работать.

2. Я только что отредактировал свой ответ, подумав, что, вероятно, более стандартизированный подход заключается в использовании вместо этого WP_Query и фильтрации по странице. Это определенно должно выводить заголовки страниц, поскольку это действительно распространенная структура цикла.

3. Спасибо! Это очень помогло!