将WordPress循环放入类中

时间:2013-02-01 17:37:01

标签: class php wordpress

我正在尝试为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循环工作的东西?

2 个答案:

答案 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();
            }
        }
    }
}