-2

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 に答える