Class 将WordPress循环放入类中
我试图为WordPress开发人员构建一个框架,帮助他们更高效、更快地开发主题和主题框架 然而,通过将wordpress循环放入一个类中,我遇到了一个小问题,这就是我所拥有的:Class 将WordPress循环放入类中,class,php,wordpress,Class,Php,Wordpress,我试图为WordPress开发人员构建一个框架,帮助他们更高效、更快地开发主题和主题框架 然而,通过将wordpress循环放入一个类中,我遇到了一个小问题,这就是我所拥有的: class AisisCore_Template_Helpers_Loop{ protected $_options; public function __construct($options = null){ if(isset($options)){ $thi
class AisisCore_Template_Helpers_Loop{
protected $_options;
public function __construct($options = null){
if(isset($options)){
$this->_options = $options;
}
}
public function init(){}
public function loop(){
if(have_posts()){
while(have_posts()){
the_post();
the_content();
}
}
}
}
现在请记住这个类的简单性。你所要做的就是:
$loop = new AisisCore_Template_Helpers_Loop();
$loop->loop();
你应该看到帖子列表
然而,帖子似乎没有出现。有什么东西阻止WordPress循环工作吗?我相信您在范围方面有问题。您需要将$wp_查询传递到类中,或者通过全局获取它。我相信这样做是可行的,但只适用于全局$wp_查询: 未经测试,但我认为以下内容应该与全局$wp_查询一起使用,或者通过传入其他查询结果集来使用
protected $wp_query;
public function __construct($wp_query = null, $options = null){
if (empty($wp_query)) global $wp_query;
if (empty($wp_query)) return false; // or error handling
$this->wp_query = $wp_query;
if(isset($options)){
$this->_options = $options;
}
}
public function loop(){
global $wp_query;
if($this->wp_query->have_posts()){
while($this->wp_query->have_posts()){
$this->wp_query->the_post();
the_content();
}
}
}
我祈祷这一点,但我认为它应该有效。但是没有承诺。正确、清晰的回答:
<?php
class AisisCore_Template_Helpers_Loop{
protected $_options;
protected $_wp_query;
public function __construct($options = null){
global $wp_query;
if(isset($options)){
$this->_options = $options;
}
if(null === $this->_wp_query){
$this->_wp_query = $wp_query;
}
}
public function init(){}
public function loop(){
if($this->_wp_query->have_posts()){
while($this->_wp_query->have_posts()){
$this->_wp_query->the_post();
the_content();
}
}
}
}
如果将wp_查询声明为全局类级别变量,我可以解决一个问题。也就是说,将一个全局变量分配给一个class leve变量,那么在函数循环中就不需要全局$wp_查询。另外:回显$loop->loop也可以工作。$wp\u查询已经是全局的。放置var_dump$GLOBALS['wp_query'];几乎在任何WordPress页面的顶部。有时仍然需要使用全局$wp_查询或通过$GLOBALS数组来访问它。我想说的是,如果您已经在构造函数中实例化它并将其设置为类级变量,则不需要在方法中进行全局定义。我明白了。不,你不应该,在第二个版本中不应该。我应该把它去掉的。不,实际上你没有。看看你的循环{}和我的相比。你的构造器也是一团糟。我实际上发布了两种可能的解决方案。也许这就是你不跟随的原因。我的构造器会做你的构造器不会做的事情。我在回答中解释了这一点。这可不是什么乱七八糟的事。事实上,你在这里发布的内容的重要部分——让它工作的部分——来自我的回答。你将我的代码片段粘贴到你显然已损坏的代码中,并声称这是一个答案,删除了我无意中留下的一个。我不打算继续这样做了,但要玩得开心。很高兴我能帮忙。
<?php
class AisisCore_Template_Helpers_Loop{
protected $_options;
protected $_wp_query;
public function __construct($options = null){
global $wp_query;
if(isset($options)){
$this->_options = $options;
}
if(null === $this->_wp_query){
$this->_wp_query = $wp_query;
}
}
public function init(){}
public function loop(){
if($this->_wp_query->have_posts()){
while($this->_wp_query->have_posts()){
$this->_wp_query->the_post();
the_content();
}
}
}
}