为了账号安全,请及时绑定邮箱和手机立即绑定

在接受 cookie 同意之前替换所有 youtube iframe

在接受 cookie 同意之前替换所有 youtube iframe

PHP
aluckdog 2022-07-29 10:08:13
这是针对 GDPR cookie 政策的。因为 youtube 使用 cookie,所以我必须阻止 youtube 视频,并且只有在接受 cookie 政策时才授予访问权限。所以我需要类似的东西:if(!isset($_COOKIE['consentaccept'])) {    // replace all iframes from https://www.youtube.com/ with:    //<div class="youtubeblock">you must enable cookies to view this video</div>}或者你有更好的解决方案有任何想法吗?它是WordPress。
查看完整描述

1 回答

?
慕虎7371278

TA贡献1802条经验 获得超4个赞

使用该template_redirect钩子,您可以访问将呈现到页面的所有 HTML。您可以使用此挂钩打开输出缓冲,查找和替换您想要的任何内容,然后返回输出,无论它是否已被修改。

请记住,这不会涵盖通过延迟加载、AJAX 请求等动态加载的任何 iframe - 但在运行时加载到 HTML 中的任何内容都将在此处。

add_action( 'template_redirect', 'global_find_replace', 99 );

function global_find_replace(){

    ob_start( function( $buffer ){

        /**

         *`$buffer` contains your entire markup for this page, at run time.

         * anything dynamically loaded with JS/Ajax, etc won't be in here

         */


        // Did they accept the GDPR cookie?

        if( !isset($_COOKIE['gdpr_consent']) ){

            // Nope. Build a simple "accept cookies" notice

            $notice = '<div class="accept-cookies">You must accept cookies to see this content</div>';


            // Replace all youtube iframes regardless of class, id, other attributes, with our notice

            $buffer = preg_replace( '/<iframe.+src="https?:\/\/(?:www.)?youtu\.?be(?:\.com)?.+<\/iframe>/i', $notice, $buffer );

        }


        // Always return the buffer, wither it was modified or not.

        return $buffer;

    });

}

这是我为 youtube 视频制作的正则表达式,如果我错过任何内容,请随时修改它:https ://regex101.com/r/2ZQOvk/2/

这应该足以让你开始!



查看完整回答
反对 回复 2022-07-29
  • 1 回答
  • 0 关注
  • 83 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信