因此,我遇到了一个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(\'« Older Entries\');
previous_posts_link(\'Newer Entries »\');
$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转储,它已经准备好了。
最合适的回答,由SO网友:Chris_O 整理而成
所以我求助于你们来帮助我看看我做错了什么。
您做错的第一件事是使简单有效的API过于复杂。
你的代码毫无意义。您的混合函数使用任意html标记回显输出,该标记被分配给一个不存在的类属性,而该属性从未做过任何处理。
您试图OOP一些您已经编写为过程的东西。只需使用一个存在于方法中的变量,然后返回或回显它,就可以了。而当您在使用WordPress函数时,它会返回值,而不是打印它们并分配给同一个变量。
使用受保护属性的唯一原因是为了类的可扩展性和构建对象。你只是在循环。