我知道这个问题与已发布的其他问题类似。我完全按照这些问题的答案中的建议,但仍然无法弄清楚为什么输出显示在页面顶部。
function foo_shortcode($atts, $content = null) {
$datashortcode = '<div>'.(function_exists('rtb_kk') ? rtb_kk() : '').'</div>';
return $datashortcode;
}
add_shortcode('showfoo', 'foo_shortcode');
有什么想法吗?
答案 0 :(得分:2)
在不知道rtb_kk()
函数如何工作的情况下,我只能假设它使用echo
来显示内容而不是使用return
。这是导致该函数的输出出现在页面顶部的原因。
要解决此问题,您可以使用ob_start()
和ob_get_clean()
捕获函数的输出:
function foo_shortcode($atts, $content = null) {
if (function_exists('rtb_kk')) {
// Start output buffering
ob_start();
// Run the function
rtb_kk();
// Capture buffer as a string
$output = ob_get_clean();
} else {
// Function doesn't exist so we return an empty string
$output = '';
}
return '<div>' . $output . '</div>';
}
add_shortcode('showfoo', 'foo_shortcode');
如果您能够使用bcn_display()
代替您正在使用的rtb_kk()
方法,则无需依赖ob_get_clean()
。
function foo_shortcode($atts, $content = null) {
if (function_exists('bcn_display')) {
// Return the output as a string so we can control when it's displayed
$output = bcn_display( true );
} else {
// Function doesn't exist so we return an empty string
$output = '';
}
return '<div>' . $output . '</div>';
}
add_shortcode('showfoo', 'foo_shortcode');
答案 1 :(得分:0)
这将解决您的问题,只需尝试
<script type="text/javascript">
function foo_shortcode($atts, $content = null) {
if(function_exists('rtb_kk')){
$rtb_kk = rtb_kk();
}else{
$rtb_kk = '';
}
$datashortcode = "<div>$rtb_kk</div>";
return $datashortcode;
}
add_shortcode('showfoo', 'foo_shortcode');
</script>