页面顶部显示的简码输出

Shortcode output shown at the top of the page

我知道这个问题与其他已发布的问题类似。我完全遵循了这些问题的答案中的建议,但仍然无法弄清楚为什么输出显示在页面顶部。

function foo_shortcode($atts, $content = null) { 

    $datashortcode = '<div>'.(function_exists('rtb_kk') ? rtb_kk() : '').'</div>';

    return $datashortcode; 

}
add_shortcode('showfoo', 'foo_shortcode');

有什么想法吗?

不知道 rtb_kk() 函数是如何工作的,我只能假设它使用 echo 来显示内容,而不是使用 return。这就是导致该函数的输出出现在页面顶部的原因。

要解决此问题,您可以使用 ob_start() and 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');

这将解决您的问题,只需尝试

<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>