我有一个自定义的post类型存档存档项目。我使用php作为页面模板,因为我有一些要显示的自定义字段。我正在尝试获取此页面的帖子id,但根据我的尝试,获取null或存档中第一篇帖子的id。我曾尝试将代码放在页面的循环之上,但没有任何运气。
如果这是重复的,我深表歉意,但我已经尝试搜索了许多关于这方面的教程,但仍然没有找到关于使用带有自定义帖子类型存档的页面模板的具体场景的答案。
我已经尝试过这段代码,它确实有效,但我仍然不明白为什么其他方法似乎都不起作用。我不愿意将此作为解决方案,因为如果用户更改页面slug,这将不再有效:
$my_page_id = get_id_by_slug(\'projects\');
function get_id_by_slug($page_slug) {
$page = get_page_by_path($page_slug);
if ($page) {
return $page->ID;
} else {
return null;
}
}
我尝试了以下操作但未成功(在模板中的自定义循环上方):
get_queried_object_id(); // returns nothing
$page_id = $wp_query->get_queried_object_id(); // returns 0
global $post; // I\'ve tried including this and removing with same effect
$post = $wp_query->post;
$post_id = $post->ID; // returns the id of the first post in my archive
关于我做错了什么,或者如何获得项目页面的实际id,有什么想法吗?
UPDATE 我的自定义帖子类型had\\u archive设置为true。我尝试创建一个自定义模板,但由于WordPress的层次结构,它正在寻找一个归档页面。我通过将has\\u archive设置为false并创建一个称为页面模板项目的自定义模板,解决了我的问题。php。然后,我可以设置一个名为“项目”的页面并使用我的自定义模板,同时能够正确获取页面的ID。
最合适的回答,由SO网友:Pieter Goosen 整理而成
编辑我想我可能误解了你的问题
这里有几个注释
如果archive-projects.php
是页面模板,请重命名它。您不应将存档用作页面模板的前缀,或为此使用任何其他保留模板名称。应命名页面模板page-{$name}.php
或模板层次结构使用的前缀的任何其他名称。这会让Wordpress感到困惑,并且会扰乱模板层次结构
如果这是一个页面模板,您应该使用get_queried_object_id();
或使用echo get_queried_object_id();
如果这是真正的存档页,您将无法获得ID
原始答案
存档页面,无论是post-type存档页面、类别存档、日期存档等,搜索页面、单页和主页都是伪页面,换句话说,是伪页面。它们没有ID,因为它们不存在,因为它们不是保存在db中的创建页面
这些页面“继承”它们显示的特定帖子或存档的ID,尽管它们本身仍然没有ID,但接受主页、日期存档、搜索页面和帖子类型存档页面
因此,简而言之,您的自定义后期归档页面将没有ID。
概念验证var_dump($wp_query)
在存档页面上,您将看到只有真实页面才有ID
?><pre><?php var_dump($wp_query); ?></pre><?php