输出缓冲-wp_head和wp_print_footer_脚本之间的所有内容?

时间:2017-01-24 作者:IndikatorDesign

在前端使用“输出缓冲”的最佳方式是什么?在我的例子中,我需要对带有页面生成器的主题生成的内容应用一些正则表达式规则。

因此,无法使用过滤器编辑代码the_content, 因为在那里,所有东西都可以作为快捷码使用。但我需要处理代码,这是WordPress通过其挂钩时生成的。

似乎最容易在wp_headwp_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
但我在几个地方读到过,它可能会导致不良的副作用。。

由于它也可能适用于其他人,我想知道是否可以用这种方式,或者是否有更好的方式?

2 个回复
最合适的回答,由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();

相关推荐

无法在模板函数.php中使用IS_HOME

我试图在标题中加载一个滑块,但只在主页上加载。如果有帮助的话,我正在使用Ultralight模板。我正在尝试(在template functions.php中)执行以下操作:<?php if ( is_page( \'home\' ) ) : ?> dynamic_sidebar( \'Homepage Widget\' ); <?php endif; ?> 但这行不通。现在,通过快速的google,我似乎需要将请