Запрос страниц в WordPress по имени шаблона


У меня есть шаблон с именем " Foo "в" foo.php", я хотел бы иметь возможность выбрать все страницы, которые используют этот шаблон. Я искал уже некоторое время, но не смог найти успешного способа сделать это... Может ли кто-нибудь просветить меня о правильном/единственном способе сделать это?

3 4

3 ответа:

Вы можете получить это, используя следующий код

$query = new WP_Query( array( 'meta_key' => '_wp_page_template', 'meta_value' => 'foo.php' ) );

if ( have_posts() ) while ( have_posts() ) : the_post();
<?php the_title(); ?>
<?php endwhile; // end of the loop. ?>

Это тоже работает

$pages = get_pages(

     array(

    'meta_key' => '_wp_page_template',

    'meta_value' => 'template.php'
       )
);

foreach($pages as $page){
    echo $page->post_title.'<br />';
}

Http://jorgepedret.com/old/web-development/get-pages-by-template-name-in-wordpress/

Ответ робота хорош, но я подумал, что должен прояснить несколько вещей.

Во-первых, вы должны использовать переменную для запроса, который вы создали, так что это будет $query - >have_posts() и т. д.

Во-вторых, вы должны указать post_type. Я использовал любой, так что он будет тянуть любые типы записей, кроме ревизий.

Наконец, если это находится на странице с любыми другими циклами WP, вы можете использовать wp_reset_query. Я добавил один ниже и один выше на всякий случай, но вам это действительно нужно, только если у вас есть другой петля сверху или снизу. Удалите его, если вы этого не сделаете.

Вот код:

wp_reset_query();
$query = new WP_Query( array(
    'post_type'  => 'any',
    'meta_key'   => '_wp_page_template',
    'meta_value' => 'foo.php'
) );

if ( $query->have_posts() ) {
    while ( $query->have_posts() ) : $query->the_post(); // WP loop
        the_title();
    endwhile; // end of the loop.
} else { // in case there are no pages with this template
    echo 'No Pages with this template';
}
wp_reset_query();

Надеюсь, что это кому-то поможет!! Счастливого кодирования!