【问题标题】:Wrapping PHP and HTML in PHP function to create a shortcode在 PHP 函数中包装 PHP 和 HTML 以创建简码
【发布时间】:2020-11-03 22:51:57
【问题描述】:

我正在尝试创建一个用于 WordPress 的简码,这将允许我使用 PHP 和 HTML 功能。

我已经创建了短代码,它使用简单的 echo Hello World 来工作,但是当我尝试使用它来显示 160 行 PHP 和 HTML 的结果时,它什么也没有显示,甚至没有错误。

尝试了几种不同的方法后,最简单的方法似乎是:

function imported_table( $atts ) {
    $var = file_get_contents(TEMPLATE_DIR . "/imported_table.php");
}
add_shortcode( 'imported_output', 'imported_table');

...imported_table.php 包含我的 160 行 HTML 和 PHP。 TEMPLATE_DIR 在 wp-config 中设置并且可以正常工作 - 至少(在几次失误之后)我没有收到“丢失文件”错误。

imported_table.php 文件有点长,放在这里,但本质上是这样的:

<Some HTML>
<?php 
?>
<Some HTML with <?php >>
<?php 
?>
<closing HTML>

其中包含大量 HTML 和嵌套的 PHP。如果我在 WordPress 的 PHP 插件中使用该代码,该代码可以自行运行,但该插件已被证明存在漏洞和自身的错误,这就是我尝试在短代码中使用该代码的原因。

【问题讨论】:

  • 是否打开了错误消息?默认情况下,Wordpress 将其关闭。还要检查 php ini 是否允许在您的服务器上使用 file_get_content。一些服务器禁用它,因为它可能存在安全风险。那么你最好使用curl
  • file_get_content 在我的 PHP 信息中没有任何条目...这是否意味着它已被禁用或者我应该寻找其他东西?编辑:打开调试,它在该页面上没有错误。
  • 函数file_get_contents() 只是获取文件的内容。结果你变成了一个没有功能的字符串。如果您希望执行您的模板,请尝试使用 wordpress 函数 load_template 或直接在您的 wordpress 函数中要求您的模板。

标签: php wordpress elementor wordpress-shortcode


【解决方案1】:

你可以试试这个吗?

不要使用 TEMPLATE_DIR 和 file_get_contents。

    function imported_table( $atts ) {
        ob_start();
        include(get_template_directory() . "/imported_table.php");
        $var = ob_get_contents();
        ob_end_clean();
        echo $var;
    }

【讨论】:

  • 可能有助于解释为什么你在这里使用 ob_start()。 OP 似乎不明白为什么需要这样做。
  • 当使用 file_get_contents 时,你不会从执行的 PHP 代码中得到结果(我的意思是 WP 短代码中的 块。并且 TEMPLATE_DIR 以短代码表示服务器上的 TEMP 目录。
  • 这行得通。就像我也尝试过“包含”一样,这也很有效。但是,当我使用您的代码时,它试图从父主题根目录而不是我正在处理的子主题获取文件。我将您的行替换为 ``` include (TEMPLATE_DIR . "/imported_table.php"); ```而且效果很好。有什么理由我不应该使用我设置的 template_dir 路径?
  • @Reverend2100,这段代码在我这边进行了测试。我认为您需要使用基本路径来查找正确的文件。或者您可以使用插件中的相对路径 __FILE__
  • 如果您想允许用主题或子主题覆盖您的模板,请使用locate_templete(),它从 WordPress 1.5 版开始提供。 WordPress 带有大量与模板相关的功能。另一个有用的功能是load_template(),它需要模板而不是加载模板的文本内容。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-10-05
  • 2021-08-04
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多