转储var时$_html为空

时间:2013-02-03 作者:TheWebs

因此,我遇到了一个bizzar问题,我知道它在数组值方面的作用与我预期的一样,但是\\u html变量返回类似字符串(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>\';
                }
            }
        }
    }

}
要关注的函数是\\u single\\u 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\\u头、图像属性和single类型。问题是,我进入了每个if语句,其中我想这是一个包装器,并且类键设置了一个值但是$this->\\u html返回空。

当我var\\u dump($this->\\u html)时;我得到一个空字符串。有人可能会问“你正在做$this->\\uHTML。=\'一些内容\';?答案是肯定的,我是,不管字符串有多空。

所以我求助于你们来帮助我看看我做错了什么。

我试着查看源代码,看看我是否疯了,但唉,我不是,没有h1标记、包装器标记或任何其他东西-然而,根据\\u选项的var转储,它已经准备好了。

1 个回复
最合适的回答,由SO网友:Chris_O 整理而成

所以我求助于你们来帮助我看看我做错了什么。

您做错的第一件事是使简单有效的API过于复杂。

你的代码毫无意义。您的混合函数使用任意html标记回显输出,该标记被分配给一个不存在的类属性,而该属性从未做过任何处理。

您试图OOP一些您已经编写为过程的东西。只需使用一个存在于方法中的变量,然后返回或回显它,就可以了。而当您在使用WordPress函数时,它会返回值,而不是打印它们并分配给同一个变量。

使用受保护属性的唯一原因是为了类的可扩展性和构建对象。你只是在循环。

结束

相关推荐

编辑.php上管理帖子列表的日期范围筛选器

我需要在WordPress admin中的Posts菜单中添加一些自定义子菜单链接,以便内容经理可以单击链接并获取今天、昨天或本月的帖子列表。WordPress后端中的默认日期过滤器仅按月份过滤帖子。当您选择该过滤器时,它会生成一个URL,如http:// ..... /wp-admin/edit.php?s&post_status=all&post_type=post&action=-1&m=201301&cat=0&post_format=0&p