$POST_TYPE全局变量是如何工作的?

时间:2017-07-23 作者:Dave

我需要在存档中输出自定义帖子类型的名称。php和single。php。

我会用这样的东西:

if ( \'staff\' == get_post_type() ) {

$post_type = \'staff\';

}

echo \'<div class="\'.$post_type.\'">Content</div>\';
这将为我提供<div class="staff">

但是,我似乎也可以访问名为$post_type 只需将其归档即可。php或单个。php即使没有声明global, 例如,这将存档与上述相同的结果:

<div class="<?php echo $post_type; ?>">
Codex表示全局变量$post_type 用于Wordpress管理区域。

我的问题是:

为什么$post_type 在不首先在全球范围内声明的情况下工作$post_type 在主题模板中使用如上所示的全局var

1 个回复
最合适的回答,由SO网友:birgire 整理而成

全球$post_type 通常来自主查询的公共查询变量$wp_query, 但是get_post_type() 是当前$post 对象,在循环中。

因此,对于二次回路,这可能有所不同。

全球$post_type 可能不会始终设置为的默认帖子类型WP_Querypost 岗位类型。

从…起WP::register_globals() 我们可以看到post_type 查询变量可全局访问:

// Extract updated query vars back into global namespace.
foreach ( (array) $wp_query->query_vars as $key => $value ) {
    $GLOBALS[ $key ] = $value;
}
正如我在最近的回答中所说here.

一般来说,我会使用WordPress API调用,而不是使用直接全局调用,因为前者通常用于处理各种情况,包括默认情况,并在需要时进行更新。

直接与全球公司合作会增加超越它们的风险。

如果您的目标是设置一些CSS选择器,通常可以只使用为<body> 标签,带有body_class() 核心功能。还要考虑post_class() 核心函数,因为它已经包含post类型类信息。

结束

相关推荐

Variables posting twice

我希望创建一个新变量,如codex中所述,但在提交URL时,变量会两次提交给我的函数我已经在一个插件中尝试了这一点function.php. 我还尝试使用wp_reset_query() 以下是我的示例代码:add_filter(\'query_vars\', \'my_function\'); function my_function ($vars) { $vars[] = \'Q1\'; $vars[] = \'Q2\'; return $v