我认为您的问题是,您的短代码响应它的输出,而不是返回它。
因此,在您的shortcode函数中,删除任何直接输出(即?>.....<?php
以及任何echo
而是将您的输出收集到一个变量中并返回:
function my_shortcode_cb($atts) {
....
$output = ....
$output .= ....
return $output;
}
More detail:
因此
while ($a != $b) {
echo "<ul>";
if ($c == $d) {
foreach ($e as $k => $v) {
?>
<li class="item-<?php echo $k; ?>"><?php echo $v; ?></li>
<?php
}
}
echo "</ul>";
}
您可以:
$output = \'\';
while ($a != $b) {
$output .= "<ul>"
if ($c == $d) {
foreach ($e as $k => $v) {
$output .= "<li class=\\"item-".$k."\\">".$v."</li>";
}
}
$output .= "</ul>";
}
return $output;
或者,如果你想便宜点;-),您可以这样做:
ob_start();
while ($a != $b) {
echo "<ul>";
if ($c == $d) {
foreach ($e as $k => $v) {
?>
<li class="item-<?php echo $k; ?>"><?php echo $v; ?></li>
<?php
}
}
echo "</ul>";
}
return ob_get_clean();
顺便说一句:如果你的短代码回调真的很长,那么它很有可能进行重构。如果这样做的话,不管怎样,很可能会从函数调用返回的字符串中汇编输出。