0

我正在创建一个 wordpress 插件,它将根据用户输入的参数查询数据库,并将结果显示在链接的 html 文件中。我可以让它显示 html 页面,但结果变量没有通过。

这是我显示链接的 HTML 文件的方式:

    //This is set in another location but
        $template = 'results';
    //Execute SQL
        global $wpdb;           
        $result = $wpdb->get_results($sql);

    //Load template
        $content = file_get_contents( plugins_url( 'template-files/'.$template.'.php',__FILE__ ) );
        foreach ( $result as $r ){
            $contentCopy = $content;
            echo jww_display_php_file($contentCopy, $r);
        }

function jww_display_php_file( $content, $r ){
    $arr = (array)$r;
    ob_start() && extract($arr, EXTR_SKIP);
    eval('?>'.$content);
    $content = ob_get_clean();
    ob_flush();
    $content .= "<hr>";
    return $content;
}

这是我在 HTML 文件中的内容:

<table width="100%" border="1" cellspacing="0" cellpadding="0">
  <tr>
    <td>Name</td>
    <td><?php echo $Name; ?></td>
  </tr>
</table>

提前感谢您的帮助

4

2 回答 2

0

首先,你results.html应该是results.php,你不能php在文件中使用变量或函数HTML,所以重命名你的文件results.php,然后试试这个

$result = $wpdb->get_results($sql);
$content = file_get_contents( plugins_url( 'template-files/results.php',__FILE__ ) );
foreach ( $result as $r ){
    $contentCopy = $content;
    echo jww_display_file($contentCopy, $r);
}

function jww_display_file( $content, $r ){
    $arr = (array)$r;
    ob_start() && extract($arr, EXTR_SKIP);
    eval('?>'.$content);
    $content = ob_get_clean();
    ob_flush();
    $content .= "<hr>";
    return $content;
}

最后,在您的results.php文件中,更改以下内容

<td><?php echo $r->Name; ?></td>
<td><?php echo $r->Age; ?></td>
<td><?php echo $r->DOB; ?></td>

<td><?php echo $Name; ?></td>
<td><?php echo $Age; ?></td>
<td><?php echo $DOB; ?></td>

注意: eval这是邪恶的,但当您使用服务器中的内部文件并且您知道代码是安全的时,这不是问题,这样,框架就像Laravel加载文件并在其框架view中混合来自控制器的变量。MVC

于 2013-05-20T02:00:02.750 回答
0

我将 results.php 重命名为 results.html,更改了 $content = file_get_contents(plugins_url('template-files/'.$template.'.html',FILE)); 它完美无缺!

于 2013-06-01T22:04:55.407 回答