2012-04-27 62 views
1

所以我开始写一个Wordpress主题,我试图将我的index.php中的The Loop的一些变量传递给content.php中的实际内容呈现器。

由于范围问题,我不能只在index.php中创建一个变量,然后尝试在content.php中访问它。使用global的想法让我感到不寒而栗,所以我想也许我会把它加到$post变量上(这已经是全球性的)。这是一种标准做法吗?除了意外修改标准$post成员var之外,是否有任何理由不希望这样做?有没有一种惯用的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";} 

回答

1

的$后变量已经被在WordPress全球,因此创建或不创建另一个全球通这个价值实际上只是一个风格问题而已。由于WordPress在OOP之前的PHP 4.x版本中的诞生,WordPress使用相当广泛的全球价值。

将值附加到$ post是可行的,但是有可能在循环迭代之间$ post对象不会被完全销毁,所以您的自定义属性可能会在后期的$ post变量迭代中结束,并可能导致意外的副作用,如果你不小心。同样,你也必须确保为属性命名空间,以免与将来的WordPress更改与$ post相冲突。

创建一个新的全局变量在WordPress中不会与众不同,将自定义属性附加到$ post变量中会有点不同寻常。如果您想命名空间并将值保留在$ _GLOBAL之外,您可以创建一个快速的注册表类,但在这种情况下可能会过度。

+0

谢谢,我会研究一种不同的方法。 – Soup 2012-04-29 06:04:59

1

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

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