按模板名称查询WordPress中的页面

nat*_*iah 5 wordpress wordpress-theming

我在"foo.php"中有一个名为"Foo"的模板,我希望能够选择使用该模板的所有页面.我已经搜索了一段时间,但一直没能找到一个成功的方法来做到这一点......有人可以通过正确/唯一的方式来启发我吗?

小智 8

机器人的回答很好,但我想我应该澄清一些事情。

首先,您应该使用您创建的查询的变量,因此它将是 $query->have_posts() 等。

其次,您应该指定 post_type。我使用了any,这样它就会拉出除修订之外的任何帖子类型。

最后,如果这是在具有任何其他 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();
Run Code Online (Sandbox Code Playgroud)

希望对某人有帮助!快乐编码!


Rob*_*bot 7

您可以使用以下代码获得此信息

$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. ?>
Run Code Online (Sandbox Code Playgroud)

  • 如果你添加 `'post_type' =&gt; 'page'` 这将会起作用。谢谢你! (2认同)
  • if(have_posts())while(have_posts()):the_post();应该是if($ query-&gt; have_posts())while($ query-&gt; have_posts()):$ query-&gt; the_post ();`? (2认同)

小智 5

这也有效

$pages = get_pages(

     array(

    'meta_key' => '_wp_page_template',

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

foreach($pages as $page){
    echo $page->post_title.'<br />';
}
Run Code Online (Sandbox Code Playgroud)

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