我正在编写一个主题,希望在页脚中显示仅在模板页面上可用的信息。我一直在使用get_page_by_title()
如果你知道该页面将被调用,那么这很有效,但在我看来,它不是很动态的,不可能预测用户将在你的主题中为页面命名。
在我的研究中,我发现一个函数get_all_page_ids()
它从站点返回ID的数字索引数组。如果这个函数是一个关联的(甚至是一个post对象),那么它会酷得多,但我离题了。
我考虑过使用类似的方法:
$all_page_ids = get_all_page_ids();
foreach ($all_page_ids as $id) {
// get_post() {@link https://developer.wordpress.org/reference/functions/get_post/}
$post_object = get_post($id);
// preg_match() {@link http://php.net/manual/en/function.preg-match.php}
if(preg_match("/\\b(contact)\\b/i", $post_object->post_title)) {
// do something here
} else {
// for readability
continue;
}
}
然而,这仍然产生了一个问题,即必须知道用户选择在标题中使用contact这个词。如果他们创建了一个名为“联系”的页面,即他们的联系人页面,会怎么样?这会破裂。
所以,简而言之,我的问题围绕着主题设计师的最佳实践。是get_page_by_title()
获取另一页ID的最佳方法,或者有没有一种方法可以在不知道标题的情况下组合几个函数/变量来获取另一页的ID?
或者是否有WordPress功能可以执行这种重载操作,或者get_page_by_title()
唯一接近的一个?我怀疑有一个黑客,但更好的方法来做这件事,我只是没有任何想法。谢谢你在这方面给予的帮助。
SO网友:Laxmana
如果您的页面是模板页面,则可以使用is_page_template($template_name)
否则,正如Mark提到的,您必须创建一个主题选项,并由用户决定。
更多信息:https://codex.wordpress.org/Function_Reference/is_page_template
UPDATE
我误解了你的问题。您可以使用某个模板名称获取所有页面,但用户也可以使用同一模板创建多个此类页面,因此您不确定要选择哪一个。
$args = array(
\'meta_key\' => \'_wp_page_template\',
\'meta_value\' => \'page-about.php\',
\'post_type\' => \'page\'
);
$posts_array = get_posts( $args );
另一个想法是在激活主题/插件时使用代码创建自己的页面,然后将id另存为一个选项,但如果用户需要,还可以提供一个主题选项来更改页面。这就是WooCommerce如何处理商店页面。
我再次相信马克的方法更好、更安全。