扩展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 函数来输出文本。任何不在括弧中的文本将会按照原样直接输出。

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

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

雁过留声,人过留名

您的电子邮箱地址不会被公开。 必填项已用 * 标注

特别提示:与当前文章主题无关的讨论相关但需要较多讨论求助信息请发布到水景一页讨论区的相应版块,谢谢您的理解与合作!请参考本站互助指南
您可以在评论中使用如下的 HTML 标记来辅助表达: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>