1

所以我开始编写一个 Wordpress 主题,我试图将一些变量从The Loopmy传递index.php到我的实际内容渲染器中content.php

由于范围问题,我不能只创建一个变量index.php然后尝试在content.php. 使用的想法global让我不寒而栗,所以我想也许我会把它标记到$post变量上(这已经是全局的)。这是标准做法吗?$post除了意外修改标准成员变量之外,我还有什么不想这样做的原因吗?有没有一种惯用的 Wordpress 方式来做到这一点?

这是我的一个例子index.php

$post->is_n = false; # bad idea?                                
if($post_number === $n){
    $post->is_n = true
}
get_template_part( 'content', get_post_format() );

然后在我的content.php

if($post->is_n){$article_classes .= " is-n";}
4

2 回答 2

1

$post 变量在 WordPress 中已经是一个全局变量,因此创建或不创建另一个全局变量来传递值实际上只是样式问题,而不是其他任何事情。鉴于其起源于 OOP PHP 4.x 之前的日子,WordPress 本身就非常广泛地使用了全局值。

将值附加到 $post 会起作用,但是 $post 对象有可能在循环迭代之间不会被完全破坏,因此您的自定义属性可能会在 $post 变量的后续迭代中结束,并且可能会导致意外的副作用,如果你不小心。同样,您必须确保适当地命名该属性,以免与未来 WordPress 对 $post 的更改发生冲突。

在 WordPress 中创建一个新的全局变量来传递变量并不会与众不同,将自定义属性附加到 $post 变量会有点不寻常。如果您想命名事物并将您的值排除在 $_GLOBAL 之外,您可以创建一个快速注册表类,但在这种情况下这可能是矫枉过正。

于 2012-04-27T17:46:08.280 回答
1

修改 $post 变量很常见,尽管我可能会选择与您描述的设计不同的设计。但是当一个人正在学习时,必须自己找出这些东西:^)

修改 $post 变量后,您可以调用wp_reset_postdata函数。这在您使用WP_Query对象时更常用。

于 2012-04-28T04:03:29.123 回答