我的处境很复杂。我会尽量简单地解释。
想象以下页面:
第1页第2页第1子页第2子页第3子页第2子页列出了具有特定分类法的自定义帖子类型中的帖子。让我们调用post类型对象,分类法只是类别,以保持简单。
为了列出不同类别的不同帖子,我为子页面提供了三个不同的页面模板:subpage-1-templ.php
, subpage-2-templ.php
和subpage-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();
最合适的回答,由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 检查当前页面的模板是否为参数中指定的模板
这些可能会解决您的问题&;也许有助于摆脱硬编码的东西。