заменить все кадры YouTube перед готовкой ie согласие принято - PullRequest
1 голос
/ 22 января 2020

Это для политики повара GDPR ie. Поскольку на YouTube используются файлы cookie, я должен блокировать видео на YouTube и предоставлять доступ только в том случае, если политика Cook ie принята.

, поэтому мне нужно что-то вроде:

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 Ответ

1 голос
/ 22 января 2020

Используя хук template_redirect, вы получаете доступ ко всем HTML, которые будут отображаться на странице. Вы можете использовать этот хук, чтобы включить Выходную буферизацию , найти и заменить все, что хотите, а затем вернуть результат обратно, независимо от того, был ли он изменен или нет.

Имейте в виду это не распространяется на любые iframes, которые загружаются динамически с отложенной загрузкой, AJAX запросов и т. д. c - но все, что загружено в 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/

Это должно быть более чем достаточно, чтобы начать, хотя!

...