#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. Спасибо! Это очень помогло!