在我的网站上,我有三种自定义帖子类型:脚本、场景和插件。当访问单一帖子类型的归档页面时(即通过访问mysite.com/plugins),您可以正确地看到该类型的所有帖子。
In archive.php, how can I find out which custom post type the user is looking at right now?
我尝试了以下方法:
<?php
global $post;
$postTypeLabels = get_post_type_labels(get_post_type_object($post));
echo var_export($postTypeLabels);
?>
但我得到的是:
Post name is stdClass::__set_state(
array( \'name\' => \'Posts\',
\'singular_name\' => \'Post\',
\'add_new\' => \'Add New\',
\'add_new_item\' => \'Add New Post\',
\'edit_item\' => \'Edit Post\',
\'new_item\' => \'New Post\',
\'view_item\' => \'View Post\',
\'search_items\' => \'Search Posts\',
\'not_found\' => \'No posts found.\',
\'not_found_in_trash\' => \'No posts found in Trash.\',
\'parent_item_colon\' => NULL,
\'all_items\' => \'All Posts\',
\'menu_name\' => \'Posts\',
\'name_admin_bar\' => NULL,
)
)
我猜,因为我在一个归档页面中,所以$post是不正确的。
P、 我知道我可以创建归档插件。用于插件归档的php。不幸的是,我安装了一个主题,据我所知,这在某种程度上阻止了这一点。所以这不是一个选择。
最合适的回答,由SO网友:s_ha_dum 整理而成
有几种方法可以做到这一点。放置:
var_dump($wp_query->query,get_queried_object()); die;
在您的
archive.php
你应该看到其中的两种方式。
$wp_query->query
将会有post_type
自定义帖子类型的组件。那不是为了post
职位类型。get_queried_object
对于自定义帖子类型,将返回大量数据,但对于post
岗位类型。
还有一些related template tags 这可能会有所帮助。is_post_type_archive
我想到了。
在这两者之间,你应该有你所需要的信息,把你所需要的逻辑组合在一起。你的问题不清楚最终结果应该是什么,所以我真的写不了多少。
因为你特别指定archive.php
这就是我测试的内容。对于其他模板,您可能需要不同的代码,尤其是get_queried_object
它根据上下文返回非常不同的信息。
SO网友:James
我在对公认答案的一些评论中看到了这一点,但我想让其他略读这些答案的人明白这一点:global $wp_query
对象对于获取存档的帖子类型更可靠。特别是来自$wp_query->query[\'post_type\']
.
您可以使用get_queried_object()
但它有一些警告。也就是说,如果您有其他查询参数,如分类术语。那样的话get_queried_object()
将返回一个WP\\u Term对象,而不是您可能要查找的post类型。
因此,如果归档文件对帖子类型有一个干净的查询,那么get_queried_object()
将起作用。但要获得更高的可靠性,请使用global $wp_query
对象
您可以在主题中使用以下函数:
/*
* PURPOSE : If there are zero results (or other parameters) in the archive query, get_post_type() isn\'t reliable for knowing what the archive\'s post type is. This function gets the post type from the global $wp_query object instead.
* PARAMS : n/a
* RETURNS : boolean / string - the slug for the post type fromm $wp_query, or false if that is not found.
* NOTES :
*/
function jp_get_archive_post_type(){
$post_type = false;
global $wp_query;
if( isset($wp_query->query[\'post_type\']) ){
$post_type = $wp_query->query[\'post_type\'];
}
return $post_type;
}