Проблема предварительной загрузки CSS на сайте Wordpress - PullRequest
0 голосов
/ 21 февраля 2019

У меня проблемы с предварительной загрузкой CSS на моем сайте WordPress.Я писал сценарий, чтобы найти все сценарии JS и CSS, помещенные в нижний колонтитул, и предварительно загрузить его в <head>.Код для сценариев JS работает нормально (когда я захожу на источник страницы на сайте, я вижу теги <link> с атрибутом предварительной загрузки внутри), но теги ссылок предварительной загрузки CSS не отображаются.

Скорее всего, я делаю это совершенно неправильно, так как я нашел рабочий код для сценариев JS, а затем попытался изменить его, чтобы он работал для CSS.Например, я не думаю, что версия версии применима к CSS, но я предположил, что она все равно будет работать, так как по умолчанию будет false, верно?

Как связанный вопрос, у меня та же проблема с веб-шрифтами.Google Pageview Insights советует мне предварительно загружать веб-шрифты, поэтому я добавил для этого несколько php, но когда я снова запустил просмотр страниц, не было ни капли.

Вот код:

add_action('wp_head', function () {

    global $wp_scripts;
    global $wp_styles;

    foreach($wp_scripts->queue as $handle) {
        $script = $wp_scripts->registered[$handle];

        //-- Check if script is being enqueued in the footer.
        if($script->extra['group'] === 1) {

            //-- If version is set, append to end of source.
            $source = $script->src . ($script->ver ? "?ver={$script->ver}" : "");

            //-- Spit out the tag.
            echo "<link rel='preload' href='{$source}' as='script'/>\n";
        }
    }

    foreach($wp_styles->queue as $handle) {
		$style = $wp_styles->registered[$handle];

		if ($style->extra['group'] === 1) {

			$source = $style->src . ($style->ver ? "?ver={$style->ver}" : "");

			echo "<link rel='preload' href='{$source}' as='style' onload='this.rel = \"stylesheet\"'/>\n
			<noscript><link rel='stylesheet' href='{$source}'/></noscript>\n";
		}
	} 
//This is the code to preload webfonts
echo "<link rel='preload' href='/wp-content/themes/salient/css/fonts/fontawesome-webfont.woff?v=4.2' as='font' type='font/woff'>";
echo "<link rel='preload' href='/wp-content/themes/salient/css/fonts/fontawesome-webfont.ttf?v=4.2' as='font' type='font/ttf'>";
}, 1);

1 Ответ

0 голосов
/ 21 февраля 2019

Добро пожаловать в StackOverflow!

Функция, которую я эффективно использовал в своих проектах для предварительной загрузки CSS:

function add_rel_preload($html, $handle, $href, $media) {
if (is_admin())
    return $html;

$html = <<<EOT
<link rel='preload' as='style' onload="this.onload=null;this.rel='stylesheet'" 
id='$handle' href='$href' type='text/css' media='all' />
EOT;

return $html;
}

add_filter( 'style_loader_tag', 'add_rel_preload', 10, 4 );

Аналогичная функция теоретически может быть использована для JS и веб-шрифтов, но она была протестирована только сCSS.

Надеюсь, это полезно!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...