所以我遇到了一个奇怪的问题,我知道它在数组值方面按我期望的那样工作,但是 _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('« 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>';
}
}
}
}
}
要关注的函数是 _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'; ?答案是肯定的,我是,但字符串看起来是空的。
所以我求助于你们来帮助我看看我在这里做错了什么。