Echo可能适用于您的特定情况,但您绝对不应该使用它。短代码并不意味着输出任何内容,它们应该只返回内容。
以下是手抄本中关于短码的注释:
请注意,短代码调用的函数不应生成任何类型的输出。短代码函数应返回用于替换短代码的文本。直接产生输出将导致意外的结果。
http://codex.wordpress.org/Function_Reference/add_shortcode#Notes
输出缓冲
有时,您会遇到输出变得难以避免或繁琐的情况。例如,您可能需要调用一个函数来在短代码回调中生成一些标记。如果该函数要直接输出而不是返回值,则可以使用称为输出缓冲的技术来处理它。
输出缓冲将允许您捕获代码生成的任何输出并将其复制到字符串中。
启动缓冲区,并确保获取内容并在完成后将其删除, 。出现在两个函数之间的任何输出都将写入内部缓冲区。ob_start()
ob_get_clean()
例:
function foobar_shortcode( $atts ) {
ob_start();
// any output after ob_start() will be stored in an internal buffer...
example_function_that_generates_output();
// example from original question - use of echo
echo 'Foo Bar';
// we can even close / reopen our PHP tags to directly insert HTML.
?>
<p>Hello World</p>
<?php
// return the buffer contents and delete
return ob_get_clean();
}
add_shortcode( 'foobar', 'foobar_shortcode' );
https://www.php.net/manual/en/function.ob-start.php