-2

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

4

2 回答 2

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

手指交叉在那个上,但我认为它应该工作。虽然没有承诺。

于 2013-02-01T17:59:06.327 回答
-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();
            }
        }
    }
}
于 2013-02-01T19:11:44.670 回答