在使用短代码时,我在获取以下代码(添加到主题的functions.php)时将结果返回到帖子时遇到了一些麻烦。
这是我在functions.php中输入的代码:
<?php
function foo_shortcode(){
global $wpdb;
$r = $wpdb->get_results("SELECT
*
FROM
shows_16 c
WHERE
c.status = 1
GROUP BY
c.id
ORDER BY
c.date_start ASC");
$c1= '<div id="main-wrapper">
<table cellspacing="0" cellpadding="0">
<tbody>
<tr id="r1">
<td id="thead" colspan="4">EVENTS 2016</td>
</tr>
<tr id="r2">
<td id="c1" >Date</td>
<td id="c2" >Event</td>
<td id="c3" >City</td>
<td id="c4" >Details</td>
</tr>';
foreach ($r as $show_result) {
$c2 .= '<tr id="rx" itemscope itemtype="http://schema.org/Event"><td id="x1"><meta itemprop="startDate" content="' .
$show_result["date_start"] . '">' . date('M j', strtotime($show_result['date_start'])) .
(($show_result["date_start"] != $show_result["date_end"]) ? print ' - ' .
'<meta itemprop="endDate" content="'. $show_result["date_end"].'">' .
date('M j', strtotime($show_result["date_end"])) : "") . '</td><td id="x2">' .
($show_result['url']=='') ? print '<span itemprop="name">'.$show_result["name"].
'</span>' : print '<a itemprop="url" href="' . $show_result["url"] .
'" target="_blank"><span itemprop="name">'. $show_result["name"] .
'</span></a>') . '</td> <td id="x3" itemprop="location" itemscope itemtype="http://schema.org/PostalAddress"><span itemprop="addressLocality">'.
$show_result["city"] . '</span></td> <td id="x4" itemprop="description">' .
$show_result["details"]. '</td></tr>';
}
$c3 = '</tbody></table></div>';
$c4 = $c1.$c2.$c3;
return $c4;
}
add_shortcode('foo_sc', 'foo_shortcode');
?>
然后我在Wordpress帖子中使用以下短代码:
[foo_sc]
我期待的结果是一个填充了类似事件的表:
Jan 3 The Foo Event Bar-city Foo's Event details go here
Jan 4 The Bar Event Foo-city Bar's Event details go here
...
我在wordpress数据库中设置了“shows_16”表,它包含有效数据。
该函数返回$ c1,$ c3但不是$ c2的结果。
感谢任何帮助。感谢
答案 0 :(得分:0)
您的 $c2
变量未正确初始化且无法在循环外访问,解决方案可能是将其初始化到您的循环之上
$c2 ="";
foreach ($r as $show_result) {
$c2 .= '<tr id="rx" itemscope itemtype="http://schema.org/Event"><td id="x1"><meta itemprop="startDate" content="' .
$show_result["date_start"] . '">' . date('M j', strtotime($show_result['date_start'])) .
(($show_result["date_start"] != $show_result["date_end"]) ? print ' - ' .
'<meta itemprop="endDate" content="'. $show_result["date_end"].'">' .
date('M j', strtotime($show_result["date_end"])) : "") . '</td><td id="x2">' .
($show_result['url']=='') ? print '<span itemprop="name">'.$show_result["name"].
'</span>' : print '<a itemprop="url" href="' . $show_result["url"] .
'" target="_blank"><span itemprop="name">'. $show_result["name"] .
'</span></a>') . '</td> <td id="x3" itemprop="location" itemscope itemtype="http://schema.org/PostalAddress"><span itemprop="addressLocality">'.
$show_result["city"] . '</span></td> <td id="x4" itemprop="description">' .
$show_result["details"]. '</td></tr>';
}
$c3 = '</tbody></table></div>';
$c4 = $c1.$c2.$c3;
答案 1 :(得分:0)
我知道这是一个太过分的问题,但这是我的答案。 :d
如果您希望输出很长,最好使用ob_start()和ob_get_clean(),而不是简单地将字符串存储在变量中。
ob_start():http://php.net/manual/en/function.ob-start.php
ob_get_clean():http://php.net/manual/en/function.ob-get-clean.php
这应该是这样的:
ob_start();?>
//...create your HTML...
<?php
return ob_get_clean();