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_once
或 include
的变量中,您需要 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
当我尝试在 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_once
或 include
的变量中,您需要 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
;