扩展5: 在表格单元中使用PHP代码

在插件作者已经发布的一系列 WP-Table Reloaded 扩展中,这应该是非常非常有用的一个吧。这也是应很多用户的要求发布的一个扩展。它使得WordPress表格管理插件 WP-Table Reloaded 能够解析并执行写在表格单元里的 PHP 代码。该扩展有助于WordPress表格动态内容的产生或者与其它插件特性相结合。

要使用 WP-Table Reloaded 扩展,您应该先阅读扩展页面,了解相关方法和说明,并按照相关要求进行操作。您还能从该页面找到实现其它功能的扩展的链接。

安全警告

正式开始之前,请您先阅读下面的警告。您必须在确认您非常需要这样的功能,并且很清楚您正在干什么的情况下使用该扩展。因为,PHP代码的功能是非常强大的!根据PHP的结构特性还有HTTP响应请求的方式,从表格单元内部运行的PHP代码与WordPress(或者其插件)的PHP代码在同一个运行环境中,所以拥有跟它们一样的权限,凡是它们能做的事情,表格单元内部的PHP代码也能做。但是与插件或者WP核心文件不同的是,这些代码并不一定只有管理员才能控制,也就是说,您需要防止普通用户通过这个途径来执行不利于网站的代码。

如果您的WordPress网站中有多个注册用户,这一点就显得更加关键:任何能够编辑 WP-Table Reloaded 的人员都能够插入PHP代码(然后由服务器执行)。如果他们想这么做的话,他们能够基于这种方式来做一些很不好的事情!既然如此,您必须保证只有那些您充分信任的用户才能够编辑 WP-Table Reloaded 表格(使用“插件选项”里的对应设置)。最好只允许网站管理员来进行相关操作。再次强调:谨慎使用相关功能!WP-Table Reloaded 或者其扩展均不会检查插入PHP代码的用户是否具有相关权限!并且:只要一个用户能够编辑表格,他就能够插入任何想要的PHP代码!(很显然,如果您是WordPress网站的唯一注册用户,所有这些问题就都不同担心了。)

对于该功能的滥用,插件作者以及本网站不负任何责任!

如果可以的话,请尽量避免使用该扩展。比如,您可以通过开发自己的简码(这些东西在表格中同样可行!)以便于您自己对表格中PHP代码的控制,而不是由编辑表格的用户来控制。

写给PHP开发人员:该扩展使用PHP语言的 eval() 函数来实现。该函数获取一个字符串(在这里就是我们表格单元里的内容)并且作为PHP代码来执行。因WordPress简码的内部结构所限,我们需要进行输出缓存来配合该函数,以便于任何输出都能够随着 [table id=N /]  简码一起输出而不是直接输出到浏览器。(在使用该插件时请充分考虑该特点,因为缓存很大数目的单元格会轻微增加表格渲染所需要的时间,同时也会增加服务器的资源消耗。)

另外,在某些服务器上,eval() 函数可能会因为安全原因而被禁用。

下面是该扩展的代码:

/**
 * Executes PHP code in table cells
 * @author Tobias Baethge
 * @see http://tobias.baethge.com/2010/02/extension-5-how-to-use-php-in-table-cells/
 */
function wp_table_reloaded_execute_php_in_cells( $cell_content ) {
    ob_start();
    eval( '?>' . $cell_content );
    $output = ob_get_clean();
    return $output;
}
add_filter( 'wp_table_reloaded_cell_content', 'wp_table_reloaded_execute_php_in_cells' );

只需要将这段代码复制到 “wp-table-reloaded-extensions.php”文件里,该文件可以根据扩展页面的使用说明来创建,在插件头声明之后而在PHP结束符号 ?>之前。如果你还没有激活这个新插件“WP- Table Reloaded Extensions”,激活即可。

您现在就可以将命令输入到表格单元中在表格中使用PHP了。这些命令必须是有效的PHP语句,包括开始和结束括弧(<?php?>)。在那些代码中,您可以使用常规的 echo 函数来输出文本。任何不在括弧中的文本将会按照原样直接输出。

使用中如果有什么问题,请详细阅读相关文档,或者到讨论区相应板块寻求解答。©

本文发表于水景一页。永久链接:<https://cnzhx.net/blog/extension-5-how-to-use-php-in-table-cells/>。转载请保留此信息及相应链接。

时间过去太久,评论已关闭。
如果您有话要说,请到讨论区留言并给出此文章链接。
谢谢您的理解 :-)