通过输出缓冲修改WP站点上的脚本/ iFrame

Modify scripts/iFrames on WP site via output buffering

提问人:eCronik 提问时间:12/22/2022 最后编辑:eCronik 更新时间:12/22/2022 访问量:57

问:

我正在寻找一种使用 OB 在我脑海中修改脚本的正确方法,以及在供访客用户即时发布的帖子中为 Twitter/Reddit 嵌入原生 WP。

到目前为止,我正在使用它(不幸的是,它适用于头部脚本,但不适用于嵌入):

if ( !is_admin() ) {

    function change_code($buffer) {

        $find = array(

            'text/javascript" src="https://www.googletagmanager.com/gtag/js?id=XXX"',
            'src="https://platform.twitter.com/widgets.js" charset="utf-8" type="text/javascript"',
            'src="https://embed.redditmedia.com/widgets/platform.js" charset="UTF-8" type="text/javascript"');

        $replace  = array(

            'text/plain" src="https://www.googletagmanager.com/gtag/js?id=XXX"',
            'src="https://platform.twitter.com/widgets.js" charset="utf-8" type="text/plain"',
            'src="https://embed.redditmedia.com/widgets/platform.js" charset="UTF-8" type="text/plain"');

        $buffer = str_replace($find, $replace, $buffer);
        return $buffer;
        
    }

    add_action('wp_loaded', 'buffer_start'); function buffer_start() { ob_start("change_code"); }
    add_action('shutdown', 'buffer_end'); function buffer_end() { ob_end_flush(); }
    
}

嵌入的解决方法是解决它们正在创建的 iFrame 代码。也尝试过,但也没有成功。 此外,在启用WP-debug时,我经常收到以下错误:

PHP Notice: ob_end_flush(): Failed to delete and flush buffer. No buffer to delete or flush in [...]child/functions.php(使用 WP 6.0.3、PHP 8.1.13)

有人可以帮我找到解决这个问题的方法吗?不确定我使用的代码是否仍然遵循现代/高效标准 - 我发现这个主题是一种替代方案,但没有设法将他们的解决方案调整到适合我的用例的任何工作程度(使对 GTag 脚本的修改也停止工作)。

感谢您抽出时间接受采访, 电子商务

php wordpress 函数 替换 output-buffering

评论


答: 暂无答案