在前端使用“输出缓冲”的最佳方式是什么?在我的例子中,我需要对带有页面生成器的主题生成的内容应用一些正则表达式规则。
因此,无法使用过滤器编辑代码the_content
, 因为在那里,所有东西都可以作为快捷码使用。但我需要处理代码,这是WordPress通过其挂钩时生成的。
似乎最容易在wp_head
和wp_print_footer_scripts
:
public function __construct()
{
add_action( \'wp_head\', array( $this, \'start\') );
add_action( \'wp_print_footer_scripts\', array( $this, \'end\') );
} // end constructor
public function start() { ob_start( array( $this, \'callback\' ) ); } // end start
public function end() { ob_end_flush(); } // end end
public function callback( $buffer )
{
// do some stuff
return $buffer;
} // end callback
但我在几个地方读到过,它可能会导致不良的副作用。。
由于它也可能适用于其他人,我想知道是否可以用这种方式,或者是否有更好的方式?
最合适的回答,由SO网友:JHoffmann 整理而成
如果您只是想修改要输出的内容the_content()
但在应用了短代码之后,有一种更简单的方法。在中筛选短代码the_content
优先级为11,如中所示default-filters.php:
add_filter( \'the_content\', \'do_shortcode\', 11 ); // AFTER wpautop()
因此,只需编写一个过滤器函数,并将其挂接为更高的优先级值,以便内容在替换短代码后通过它。
public function __construct() {
add_filter( \'the_content\', array( $this, \'wpse_253803_filter\' ), 20 );
}
public function wpse_253803_filter( $content ) {
//do some stuff
return $content;
}
SO网友:Ethan O\'Sullivan
当我使用output buffering, 我钩住wp_loaded
因为这确保了我的正则表达式在加载所有内容后应用于内容。
一旦WordPress、所有插件和主题完全加载并实例化,就会触发此操作挂钩
以下是使用输出缓冲时要使用的模板:
<?php
class WPSE_253803 {
public function __construct() {
# Remove HTTP and HTTPS protocols
add_action( \'wp_loaded\', array( $this, \'output_buffering\' ), PHP_INT_MAX, 1 );
}
public function output_buffering() {
# Enable output buffering
ob_start( function( $content ) {
# Enter code here...
return $content;
} );
}
}
# Instantiate the class
new WPSE_253803();