Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/279.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 将带有短代码的文件呈现到wordpress插件中_Php_Wordpress - Fatal编程技术网

Php 将带有短代码的文件呈现到wordpress插件中

Php 将带有短代码的文件呈现到wordpress插件中,php,wordpress,Php,Wordpress,我对php和wordpress比较陌生,我想知道如何在没有include语句的情况下呈现php文件 例如,如果我有两个文件plugin.php和component.php plugin.php <?php add-shortcode('myshortcode', 'myshortcode-func'); function myshortcode-func() // magic function that loads $result = LOAD('componen

我对php和wordpress比较陌生,我想知道如何在没有include语句的情况下呈现php文件

例如,如果我有两个文件
plugin.php
component.php

plugin.php

<?php
  add-shortcode('myshortcode', 'myshortcode-func');

  function myshortcode-func()
    // magic function that loads
    $result = LOAD('component.php');
    return $result;
  }
?>

component.php

<div>
   <img scr="<?php getimage() ?>" />
</div>

如何:

$php = file_get_contents("component.php");
eval($php);
eval
非常危险,不应在生产中使用

如果这是为了生产,我建议使用钩子/过滤器(参见wordpress源代码)。这使您可以动态执行代码块,但约束更大

如何:

$php = file_get_contents("component.php");
eval($php);
eval
非常危险,不应在生产中使用


如果这是为了生产,我建议使用钩子/过滤器(参见wordpress源代码)。这使您可以动态执行代码块,但约束更大

您可以使用输出缓冲区:

function myFunc(){
  ob_start();
  include('component.php');
  return ob_get_clean();
}

您可以使用输出缓冲区:

function myFunc(){
  ob_start();
  include('component.php');
  return ob_get_clean();
}


如果包含渲染,则问题在包含的文件中;不使用PHP的include语句。。。可能在结束后换行?>但直接将文件包含在流中,对吗??我不想这样。我希望有内容,传递给函数,并将其本身包含在内。(这是一个短代码的wordpress插件)您可能想提高解决方案的级别,并描述您遇到的总体问题。可能有两种或三种不同的方法需要考虑。我确切的问题是我想写的插件,如果包括螺丝渲染,那么问题就在你所包含的文件中;不使用PHP的include语句。。。可能在结束后换行?>但直接将文件包含在流中,对吗??我不想这样。我希望有内容,传递给函数,并将其本身包含在内。(这是一个短代码的wordpress插件)您可能想提高解决方案的级别,并描述您遇到的总体问题。有可能有两种或三种不同的方法来考虑。我精确地问我关于插件的问题,我想写它是为了生产…为什么它是危险的。您认为使用输出缓冲区的方法怎么样?你能给我一个什么是钩子和过滤器的指针吗?谢谢,loteval是危险的,因为很难知道它会传递什么。Wordpress使用钩子/过滤器来允许插件或修改核心行为。你可以借助核心Wordpress或者自己编写一个简单的钩子系统。基本上,它只是一个数组,函数名存储在键下。它们可以像
foreach($hookas$hook){$hook($data);}
那样执行;这样,至少您知道这些函数只有在附加到顶级php代码中时才会执行。。。为什么它是危险的。您认为使用输出缓冲区的方法怎么样?你能给我一个什么是钩子和过滤器的指针吗?谢谢,loteval是危险的,因为很难知道它会传递什么。Wordpress使用钩子/过滤器来允许插件或修改核心行为。你可以借助核心Wordpress或者自己编写一个简单的钩子系统。基本上,它只是一个数组,函数名存储在键下。它们可以像
foreach($hookas$hook){$hook($data);}
那样执行;这样,至少您知道这些函数只有在附加到顶级php代码中时才会执行。是的,如果加载太多,它们可能会溢出并过早打印内容。缓冲区有一个固定的大小(在php.ini中定义)@Baptiste Pernet,您只需小心关闭打开的缓冲区。我从未见过缓冲区溢出,即使在堆栈中使用多个缓冲区。组件的输出通常都很小。你能把组件代码包装成函数吗?对我来说,这段代码代替了简单的返回,提供了更好的结果$out=ob_get_clean();退回$out;也许它与PHP版本有关。是的,如果您在其中加载太多内容,它们可能会溢出并过早打印内容。缓冲区有一个固定的大小(在php.ini中定义)@Baptiste Pernet,您只需小心关闭打开的缓冲区。我从未见过缓冲区溢出,即使在堆栈中使用多个缓冲区。组件的输出通常都很小。你能把组件代码包装成函数吗?对我来说,这段代码代替了简单的返回,提供了更好的结果$out=ob_get_clean();退回$out;也许它与PHP版本有关。