查找页面模板并显示内容

时间:2016-05-21 作者:Jesse Winton

因此,我正在为具有单页面布局功能的客户端构建一个主题。目前,我允许用户创建父页面,该页面中的模块是单独的页面,将设置为主页的子页面。

澄清。我有一个主页。在主页中,我需要有一个部分来显示产品教程和地图。客户端将创建父页面主页,然后创建一个名为Product Tour &;Map. 这些页面将设置为的子页面Home 我已经建立了一个循环,它将拉取页面的所有子级并显示它们。

这就是我陷入困境的地方。我需要允许我的客户端创建一个子页面并设置一个自定义页面模板,然后该模板将显示在主页上。有人知道我怎样才能loop 按照这种方式工作,根据用户的选择查找页面模板并通过该页面模板显示内容?我已经搜索了所有可以想象得到的东西,搜索了每个论坛,但我找不到任何有用的东西,所以我想你们中的一些WordPress超级忍者可能会很神奇,给我一些急需的帮助。

我找到了另一个类似于这个问题的答案here, 但我需要有人明确我该如何实施这一点。

我将永远感激你。

谢谢

2 个回复
最合适的回答,由SO网友:Jesse Winton 整理而成

我能够弄明白这一点,并使其充满活力。

我创建了一个变量$template 我将其放入循环中,在其中存储页面模板。

$template = get_post_meta( $post->ID, \'_wp_page_template\', true );

然后,我在需要显示子页面的地方使用它。

<?php include(locate_template($template)); ?>

这对我来说很有用,并且根据所选的页面模板将每个子页面拉入父页面。这里是代码的全部内容,供您欣赏。

<?php 
  $this_page=get_query_var(\'page_id\');
  $loop = new WP_Query( array(\'post_type\'=>\'page\', \'posts_per_page\' => -1, \'post_parent\' => $this_page, \'orderby\' => \'menu_order\', \'order\' => \'ASC\') ); 
  while ( $loop->have_posts() ) : $loop->the_post();

  <?php include(locate_template($template)); ?>

<?php endwhile; endif; ?>

SO网友:Tim Malone

您链接到的问题并不能满足您的需要-它允许您将模板分配给您正在查询的页面,但您真正想要的是将页面分配给特定模板。

您可以使用get_pages() 通过查询页面的元键实现。

页面/帖子可以分配一系列字段,包括内置字段和自定义字段。任何超出标准的内容(如日期、帖子类型、作者等)都被称为“post meta”。对于页面,“页面模板”设置是一个可以单独查询的元项。

以下是您在案例中的做法:

$templated_pages = get_pages(
  array(
    "meta_key" => "_wp_page_template",
    "meta_value" => "file-name-of-your-template.php",
  )
);

foreach($templated_pages as $page){
  print_r($page); // print everything so you can see what you\'ve got
  echo get_the_title($page); // print the title
  echo apply_filters("the_content", $page->post_content); // print the content of the page
}
有关get\\u pages()函数的更多详细信息,请参见Wordpress function reference. 根据您想要获取的信息,您还可以查找其他功能,例如,您可以使用$page foreach循环中的变量。

相关推荐

WordPress Custom Post Loop

我正在尝试循环浏览自定义WordPress帖子,遇到了一个问题,比如我添加了自定义字段并想在中显示它<li> 使用循环。我成功地完成了操作,但数据/链接/类别正在重复,如果类别与以下内容相同,我希望只显示一次:如果我有2篇带有data1类别的帖子,那么链接将只显示data1once 但我有2个不同类别的帖子,然后它会分别显示每个帖子。Sample Code:<ul class="filter filter-top"> <li cla