Elementor 页面构建器简码问题 - 使用 ob_start 和 ob_get_clean 时无法包含外部 PHP 文件

Elementor page builder shortcode issue - unable to include external PHP file when using ob_start and ob_get_clean

当我尝试在 elementor 中包含我的自定义 wordpress 插件短代码时,我遇到了一个奇怪的问题。每当我使用外部 php 文件时,都没有输出。

此代码运行良好:

// Shortcode Output function
function vergleichsplugin_output_frontend() 
{

        ob_start();

        echo '<div class="vergleichsplugin"></div>';

        return ob_get_clean();

}


/* Shortcodes */ 
add_shortcode('vergleichsplugin','vergleichsplugin_output_frontend'); 

但这根本不会产生任何输出(文件路径正确):

// Shortcode Output function
function vergleichsplugin_output_frontend() 
{

    ob_start();


    $html = require_once(ABSPATH.'/wp-content/plugins/vergleichsplugin/views/frontend/frontend.php'); 


    $html = $html.ob_get_clean();
    return $html;
}



/* Shortcodes */ 
add_shortcode('vergleichsplugin','vergleichsplugin_output_frontend'); 

frontend.php的内容相同:

echo '<p>Output</p>'; 

你试过这样的东西吗?

function vergleichsplugin_output_frontend() {
    ob_start();

    include(ABSPATH.'/wp-content/plugins/vergleichsplugin/views/frontend/frontend.php'); 

    return ob_get_clean();
}
add_shortcode('vergleichsplugin','vergleichsplugin_output_frontend'); 

为什么您的解决方案不起作用?

为了将您的文件内容保存到带有 require_onceinclude 的变量中,您需要 return 该文件中的所有 html。类似于:

// frontend.php

<?php

$html = "<h1>Some sample html</h1>";

return $html;

?>

此外此部分无效:

    $html = $html.ob_get_clean();
    return $html;

应该是:

    $html = ob_get_clean();
    return $html;

由于使用缓冲区,您不需要将要求保存到变量,因为 html 将由 ob_get_clean;

编辑 return