如何从档案页面获取自定义帖子类型?

时间:2013-03-17 作者:pek

在我的网站上,我有三种自定义帖子类型:脚本、场景和插件。当访问单一帖子类型的归档页面时(即通过访问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。不幸的是,我安装了一个主题,据我所知,这在某种程度上阻止了这一点。所以这不是一个选择。

6 个回复
最合适的回答,由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网友:Nabil Kadimi

以下是您想要的函数:

/**
 * Get the current archive post type name (e.g: post, page, product).
 *
 * @return String|Boolean  The archive post type name or false if not in an archive page.
 */
function get_archive_post_type() {
    return is_archive() ? get_queried_object()->name : false;
}

SO网友:Vũ Trọng Quang

die(var_dump(get_taxonomy(get_queried_object()->taxonomy)->object_type));
我想这就是你问题的答案。

快乐的编码!!!

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;
}

SO网友:revo

没有其他好的选择,而不是模板制作!

或者在访问自定义帖子类型存档(根据其url)时包含模板文件。

有关更多信息,请参阅更多链接:

http://codex.wordpress.org/Function_Reference/load_template

wordpress - load a template based on the URI

http://www.mihaivalentin.com/wordpress-tutorial-load-the-template-you-want-with-template_redirect/

SO网友:GantangPedia

为什么不直接使用get_query_var(\'post_type\')?

https://developer.wordpress.org/reference/functions/get_query_var/

结束

相关推荐

显示Archives.php中的所有自定义帖子类型

我该怎么做?archive.php 只有以下内容:wp_get_archives(\'type=monthly\'); 以及wp_get_archives() 没有显示所有帖子类型的参数。我也认为archive-[post_type].php 不是我要找的,因为我希望所有帖子类型都显示在一个归档页面中。谢谢W