GET_PAGE_BY_TITLE()的替代方法是什么?

时间:2016-01-06 作者:mrClean

我正在编写一个主题,希望在页脚中显示仅在模板页面上可用的信息。我一直在使用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() 唯一接近的一个?我怀疑有一个黑客,但更好的方法来做这件事,我只是没有任何想法。谢谢你在这方面给予的帮助。

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

如果您不强制设置标题,并且显然不知道id,那么唯一的方法就是让用户选择要使用的页面,通常在主题的选项页面中完成,但可以在costumizer中完成,甚至可以作为页面编辑的一部分

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如何处理商店页面。

我再次相信马克的方法更好、更安全。

相关推荐

如何将当前用户ID/条目ID插入到短码中?

我想知道是否有人可以帮助我编写函数的代码片段。php。我正在使用一个名为Connections Pro的插件和扩展链接,它将条目连接到wordpress用户。它有一个非常简单的短代码:[连接id=1],其中数字后是条目id($entryID),可以为应显示的单个用户手动设置。我希望它成为登录用户的条目ID。有没有可能有人有主意?