在循环期间修改Wordpress中的$ post变量是否合理?

时间:2012-04-27 17:25:51

标签: wordpress-theming wordpress

所以我开始写一个Wordpress主题,我试图将The Loopindex.php的一些变量传递给我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";}

2 个答案:

答案 0 :(得分:1)

$ post变量已经是WordPress中的全局变量,所以创建或不创建另一个全局来传递值实际上只是风格问题而不是其他任何东西。鉴于WordPress早于OOP PHP 4.x天的起源,WordPress自行广泛使用全局值。

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

创建一个新的全局来传递变量在WordPress中并不是不寻常的,将自定义属性附加到$ post变量会有点不寻常。如果你想要命名并保持你的值超出$ _GLOBAL,你可以创建一个快速注册表类,但在这种情况下这可能是过度的。

答案 1 :(得分:1)

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

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