Откат WordPress для CDN Bootstrap без использования JavaScript? - PullRequest
0 голосов
/ 17 января 2019

Разработка темы для WordPress с использованием Bootstrap 4 Я знаком с предлагаемым подходом кодирования <div>:

<div id="bootstrapCssTest" class="hidden"></div>

и проверка его с помощью JavaScript:

<script type="text/javascript">
    if ($('#bootstrapCssTest').is(':visible') === true) {
        $('<link href="/localcopy/css/bootstrap.css" rel="stylesheet" type="text/css" />').appendTo('head');
    }
</script>

ссылка: " Как загрузить локальную копию начальной загрузки css, когда сервер cdn не работает? ", но я хотел бы проверить способ CSS без JavaScript и поставить в очередь Bootstrap в зависимости от того, является ли CDN найденный. После исследования я прочитал, что fopen не всегда может быть разрешен на уровне сервера, поэтому я выбрал get_headers, код:

function bootstrap_css() {
    $bootstrap_cdn   = 'https://stackpath.bootstrapcdn.com/bootstrap/4.2.1/css/bootstrap.min.css';
    $cdn_check       =  @get_headers($bootstrap_cdn);

    if ($cdn_check[0] === "HTTP/1.1 200 OK") :
        wp_enqueue_style('bootstrap',$bootstrap_cdn,array(),'4.2.1');

        function add_cross_origin($html,$handle) {
            if ('bootstrap' === $handle) {
                return str_replace("media='all'","media='all' integrity='sha384-GJzZqFGwb1QTTN6wy59ffF1BuGJpLSa9DkKMp0DgiMDm4iYMj70gZWKYbI706tWS' crossorigin='anonymous'",$html);
            }
                return $html;
            }
        add_filter('style_loader_tag','add_cross_origin',10,2);
    else :
        wp_enqueue_style('bootstrap',get_site_url() . '/css/bootstrap.min.css',false,'4.2.1');
    endif;
}
add_action('wp_enqueue_scripts','bootstrap_css');

Есть ли лучший подход для проверки доступности CDN Bootstrap CSS, который не использует JavaScript для тестирования? Должен ли я проверять что-либо, кроме «HTTP / 1.1 200 OK»? cURL лучше использовать, чем get_headers?

1 Ответ

0 голосов
/ 14 августа 2019

После того, как скрипт php впервые попытается получить доступ к файлу CSS, сервер возвращает код состояния 304. Самая простая реализация для проверки этого будет выглядеть следующим образом:

function bootstrap_css() {
$bootstrap_cdn   = 'https://stackpath.bootstrapcdn.com/bootstrap/4.2.1/css/bootstrap.min.css';
$cdn_check       =  @get_headers($bootstrap_cdn);

if (strpos($cdn_check[0], "200") !== false || strpos($cdn_check[0], "304") !== false) :
    wp_enqueue_style('bootstrap',$bootstrap_cdn,array(),'4.2.1');

function add_cross_origin($html,$handle) {
    if ('bootstrap' === $handle) {
        return str_replace("media='all'","media='all' integrity='sha384-GJzZqFGwb1QTTN6wy59ffF1BuGJpLSa9DkKMp0DgiMDm4iYMj70gZWKYbI706tWS' crossorigin='anonymous'",$html);
    }
        return $html;
    }
add_filter('style_loader_tag','add_cross_origin',10,2);
    else :
        wp_enqueue_style('bootstrap',get_site_url() . '/css/bootstrap.min.css',false,'4.2.1');
    endif;
}
add_action('wp_enqueue_scripts','bootstrap_css');
...