Get page by template?

时间:2012-10-29 作者:qwerty

我的处境很复杂。我会尽量简单地解释。

想象以下页面:

第1页第2页第1子页第2子页第3子页第2子页列出了具有特定分类法的自定义帖子类型中的帖子。让我们调用post类型对象,分类法只是类别,以保持简单。

为了列出不同类别的不同帖子,我为子页面提供了三个不同的页面模板:subpage-1-templ.php, subpage-2-templ.phpsubpage-3-templ.php. 这些模板中的每一个都列出了帖子类型(对象)的特定类别中的帖子。它是硬编码的。

到目前为止一切都很好,正如预期的那样。要硬编码有点难看,但我不知道还有其他方法,所以现在必须这样做。(我宁愿抛弃wordpress,但那是另一回事)

所有这些子页面都在子菜单中列出了同级。所以,如果您在子页面2上,它将显示子页面1、2和3(但子页面2上有一个当前类)。效果很好。

现在来看看实际问题;当您单击子页面中列出的其中一篇文章时,您将进入一个页面,该页面将按预期显示该文章的更多信息。问题是我想在那里显示第2页的子菜单(因此,子页面1、2和3)。如果没有硬编码,我不知道怎么做。

也许,我不知道这是否可行,但也许我可以通过它的模板找到一个页面。我可以为第2页创建一个名为objects-template.php 然后在一篇帖子中,我可以抓取使用该模板的页面,然后获取其所有子项,然后简单地列出它们。我只是不知道如何通过模板获取页面,如果可能的话(最好是通过模板文件名,但模板名称也可以)。

有什么建议吗?

Edit

    // Query looks fine right?
    $query = new WP_Query(array(
        \'meta_key\' => \'_wp_page_template\',
        \'meta_value\' => \'objects-parent-page-template.php\'
    ));
    // Dump the id (also tried just getting the object with get_queried_object(), still get null)
    echo \'<pre>\'; var_dump($query->get_queried_object_id()); die();

1 个回复
最合适的回答,由SO网友:Mridul Aggarwal 整理而成

页面模板的文件名存储为带有键“\\u wp\\u page\\u template”的post meta,因此基本上可以使用get_post_meta($post_id, \'_wp_page_template\', true); 获取ID为的页面的模板文件名$post_id.

您也可以使用Custom Field Parameters 在里面WP_Query 或其他wordpress功能。

还有一个条件函数is_page_template 检查当前页面的模板是否为参数中指定的模板

这些可能会解决您的问题&;也许有助于摆脱硬编码的东西。

结束

相关推荐

Add Field To All Pages

我正在尝试向内置页面内容类型添加自定义字段。我找到了很多关于如何在单个页面上执行此操作的教程,但我想在我的主题中的所有页面上执行此操作。请给我指出正确的方向。