I am trying to build a framework essentially for WordPress Developers to help develop Themes and Theme Frameworks more efficiently and faster.
How ever, I am having a small issue by putting the wordpress loop into a class, this is what I have:
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();
}
}
}
}
Keep in mind the simplicity of the class for now. All you have to do is:
$loop = new AisisCore_Template_Helpers_Loop();
$loop->loop();
And you should see the list of posts.
How ever, it appears that posts do not appear. Is there something preventing the WordPress loop from working?
I believe you have problem with "scope". You will need to pass $wp_query
into the class or grab it via global
. I believe that just this would work but only for the global $wp_query
:
public function loop(){
global $wp_query;
if(have_posts()){
while(have_posts()){
the_post();
the_content();
}
}
}
Untested but I think the following should work either with the global $wp_query
or by passing in some other query result set.
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();
}
}
}
Fingers crossed on that one but I think it should work. No promises though.
The proper, clean answer:
<?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();
}
}
}
}