我非常感谢任何人的帮助。基本上我想创建一个由其他数组组成的列表数组,以克服wordpress'do_shortcode函数的限制。我正在使用许多功能。
问题的长篇大论:
目前代码如下:
/* These are the functions contained in a functions file */
function output_entry_data() {
$postdate = get_the_date('j/n/y');
$entrytitle = get_the_title();
return ('<li><p class="postmeta">'. $postdate. '</p><h3>'. $entrytitle. '</h3></li>');
}
function output_month_data($entrynomax = '', $month = '', $entrydata = '') {
$entryno = 1;
while($entryno <= $entrynomax) {
echo $entrydata[$entryno];
$entryno++;
}
}
function output_year_data($monthlynomax = '', $year = '', $monthlydata = '') {
$monthno = 1;
while($monthno <= $monthnomax) {
echo do_shortcode('<h4>[slider title="'. $month. '"]</h4><ul>'. $monthlydata[$monthno]. '</ul>[/slider]');
$monthno++;
}
}
/* This is from a loop that determines whether you have reached the end of a month or a year */
$entrydata[$entryno] = output_entry_data();
$entrynomax = $entryno;
$monthlydata = array($monthno => $monthno);
$monthlydata[$monthno] = return(output_month_data($entrynomax, $month, $entrydata));
$monthlynomax = $monthno;
$annualdata[$yearno] = array($yearno => $yearno);
$annualdata[$yearno] = return(output_year_data($monthlynomax, $year, $monthlydata));
$entryno = 1;
$monthno = 1;
$yearno++;
$yearo = get_the_date('Y');
/* The idea is that all the data gets outputted at the end of the loop like this: */
$yearnomax = $yearno;
echo ('<ul>');
$yearno = 1;
if($yearno <= $yearnomax) {
echo do_shortcode('<h3>[expand title ="'. $year. '"]</h3><ul>'. $annualdata[$yearno]. '</ul>[/expand]');
$yearno++;
}
echo('</ul>');
目前代码成功创建$ entrydata [$ entryno]数组,因为函数output_entry_data()每次只返回一行代码。
但是,当我尝试为每个月创建数组$ monthlydata [$ monthno]时,它只运行函数output_month_data()并列出所有月份条目的大列表,而不是将数据传递给数组到被其他函数使用。
我可以看到这是因为我在output_entry_data()中使用'return',在output_month_data()中使用'echo'
问题的短篇
数组$ entrydata [$ entryno]中的每个项目都是一个包含列表项标签的字符串,我希望output_monthly_data()返回$ entrydata [$ entryno]中所有项目的一个大字符串,供其他函数使用而不是像代码当前那样回应它们。这可以在涉及到while循环时完成吗?
非常感谢,我很感激这里的任何意见。
答案 0 :(得分:0)
是的,这很容易实现。至少有两种方式
连接字符串并返回结果字符串:
function output_month_data($entrynomax = '', $month = '', $entrydata = '') {
$entryno = 1;
$return = '';
while($entryno <= $entrynomax) {
$return .= $entrydata[$entryno]; # concatenate strings
$entryno++;
}
return $return;
}
将结果存储在数组中并使用implode
返回包含所有项目的字符串:
function output_month_data($entrynomax = '', $month = '', $entrydata = '') {
$entryno = 1;
$return = array();
while($entryno <= $entrynomax) {
$return[] = $entrydata[$entryno]; # append to array
$entryno++;
}
return implode('', $return); # change '' to any glue you want
}