我正在尝试为WordPress开发人员构建一个框架,以帮助更有效,更快地开发主题和主题框架。
然而,通过将wordpress循环放入类中我遇到了一个小问题,这就是我所拥有的:
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循环工作的东西?
答案 0 :(得分:2)
我相信你有“范围”的问题。您需要将$wp_query
传递到课程中,或通过global
抓取。我相信这只会对全球$wp_query
:
public function loop(){
global $wp_query;
if(have_posts()){
while(have_posts()){
the_post();
the_content();
}
}
}
未经测试但我认为以下内容应该可以使用全局$wp_query
或传入其他一些查询结果集。
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();
}
}
}
手指越过那个,但我认为它应该有效。但是没有承诺。
答案 1 :(得分:-3)
正确,干净的答案:
<?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();
}
}
}
}