WordPress过滤器来修改最终的HTML输出

5 浏览
0 Comments

WordPress过滤器来修改最终的HTML输出

WordPress拥有出色的过滤器支持,可以获取各种特定的内容,并在输出之前修改它。比如the_content过滤器,它可以让你访问一个帖子的标记,在其被输出到屏幕之前。我正在尝试寻找一个全方位的过滤器,以便在输出最终标记之前对其进行修改。我已经浏览了过滤器列表多次,但并没有发现什么特别吸引我的东西:https://codex.wordpress.org/Plugin_API/Filter_Reference。有人知道一个吗?

admin 更改状态以发布 2023年5月21日
0
0 Comments

这个问题可能已经老掉牙了,但我找到了更好的方法:

function callback($buffer) {
  // modify buffer here, and then return the updated code
  return $buffer;
}
function buffer_start() { ob_start("callback"); }
function buffer_end() { ob_end_flush(); }
add_action('wp_head', 'buffer_start');
add_action('wp_footer', 'buffer_end');

解释
这个插件代码注册了两个动作 - buffer_startbuffer_end

buffer_start在html头部的末尾执行。参数,即回调函数,在输出缓冲区的末尾调用。这发生在页面的页脚,当第二个注册的动作buffer_end执行时。

回调函数是您添加代码来更改输出值($buffer变量)的地方。然后您只需返回修改后的代码,页面就会显示。

注意
确保为buffer_startbuffer_endcallback使用唯一的函数名称,以便它们不会与您在插件中可能拥有的其他函数发生冲突。

0
0 Comments

WordPress没有"最终输出"过滤器,但是你可以组合一个。下面的例子在我为一个项目创建的"必须使用"插件中。

注意:我还没有测试使用"关闭"动作的任何插件。

该插件通过迭代所有打开的缓存级别,关闭它们并捕获它们的输出来工作。然后它触发"final_output"过滤器,回显过滤后的内容。

遗憾的是,WordPress执行几乎完全相同的过程(关闭打开的缓存),但实际上不捕获缓存进行过滤(仅刷新它),因此额外的"关闭"动作无法访问它。因此,以下操作优先于WordPress的操作。

wp-content/mu-plugins/buffer.php


一个接入final_output过滤器的例子:


编辑:

这段代码使用匿名函数,在PHP 5.3及以上版本中才支持。如果你正在使用PHP 5.2或更早版本运行网站,你会自寻烦恼。PHP 5.2发布于2006年,尽管WordPress(编辑:在WP版本< 5.2)仍提供支持,但你不应该使用它。

0