-1

そのため、配列値に関して期待どおりに機能していることはわかっていますが、 _html 変数は string(29) " " のようなものを返します。これは、私の知る限り、29 個のスペースを意味します。文字としてカウントします(お気軽に修正してください)。

とにかく、クラス:

<?php

class AisisCore_Template_Helpers_Loop{

    protected $_options;

    protected $_wp_query;

    protected $_html = '';

    public function __construct($options = array()){
        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(isset($this->_options)){
            if(isset($this->_options['query'])){
                $this->_query_post($this->_options['query']);
            }elseif(isset($this->_options['type']) && $this->_options['type'] == 'single'){
                $this->_single_post();
            }else{
                $this->_general_wordpress_loop();
            }
        }else{
            $this->_general_wordpress_loop();
        }
    }

    protected function _general_wordpress_loop(){
        if($this->_wp_query->have_posts()){
            while($this->_wp_query->have_posts()){
                $this->_wp_query->the_post();
                the_excerpt();
            }
        }
    }

    protected function _query_post($query){
        $empty_query = $this->_wp_query;
        $wp_query = new WP_Query($query);

        if($wp_query->have_posts()){
            while($wp_query->have_posts()){
                $wp_query->the_post();
                the_excerpt();
            }
        }

        next_posts_link('&laquo; Older Entries'); 
        previous_posts_link('Newer Entries &raquo;');

        $wp_query = $empty_query;
    }

    protected function _single_post(){
        if($this->_wp_query->have_posts()){
            while($this->_wp_query->have_posts()){
                $this->_wp_query->the_post();

                if(isset($this->_options['wrapper'])){
                    $this->_html .= '<div ';

                    if(isset($this->_options['wrapper']['class'])){
                        $this->_html .= 'class="'.$this->_options['wrapper']['class'].'"';
                    }elseif(isset($this->_options['wrapper']['id'])){
                        $this->_html .= 'class="'.$this->_options['wrapper']['id'].'"';
                    }

                    $this->_html .= ' >';
                }

                if(isset($this->_options['title_header'])){
                    $this->_html .= '<'.$this->_options['title_header'].'>';
                    the_title();
                    $this->_html .= '</'.$this->_options['title_header'].'>';
                }else{
                    the_title();
                }

                $this->_html .= '<a href="'.get_author_posts_url(get_the_author_meta( 'ID' )).'">'.the_author_meta('display_name').'</a>';
                the_date();
                if(isset($this->_options['image'])){
                    if(isset($this->_options['size']) && isset($this->_options['args'])){
                        the_post_thumbnail($this->_options['image']['size'], $this->_options['image']['args']);
                    }else{
                        the_post_thumbnail('medium');
                    }
                }

                the_content();

                if(isset($this->_options['wrapper'])){
                    $this->_html .= '</div>';
                }
            }
        }
    }

}

注目すべき関数は _single_post() 関数です。このクラスをインスタンス化して使用するには、次のようにします。

$array = array(
    'wrapper' => array(
        'class' => 'span12'
    ),
    'title_header' => 'h1',
    'image' => array(
        'size' => 'type',
        'args' => array(
            'align' => 'centered', 
            'class' => 'thumbnail marginBottom20 marginTop20'
        )
    ),
    'type' => 'single'
);

$loop = new AisisCore_Template_Helpers_Loop($array);
$loop->loop();

ご覧のとおり、ラッパー div、title_header、画像属性、およびシングル タイプを設定します。問題は、これがラッパーであり、クラスキーに値が設定されている場合のように、各 if ステートメントに入ることです..しかし、 $this->_html は空を返します。

いつ var_dump($this->_html); 空の文字列を取得します。「$this->_html .= 'some content'; を実行している場所に入っていますか?」と尋ねる人がいるかもしれませんが、その答えは「はい」です。

だから私はここで私が間違っていることを理解するのを助けるためにあなたたちに頼ります。

4

1 に答える 1

0

the_title()ええと、あなたが「andandand」のようなものを呼んthe_author_meta('display_name')でいるすべての場所は間違っていますthe_post_thumbnailthe_content()それらは出力を引き起こし、文字列を返しません。

また、データをvar_dumpしている場所がわからないと、期待される結果がどうなるかを言うことはできません。

于 2013-02-03T02:32:07.157 に答える