Как добавить атрибут cloudflares data-cfasync = "false" к элементам скрипта в WordPress - PullRequest
0 голосов
/ 27 марта 2020

У меня есть несколько файлов, вызывающих проблемы, когда я использую ракетный загрузчик cloudflare. Но это повышает скорость моего сайта на 0,5 se c.

Я работаю в среде Wordpress, и, как вы все правильно знаете, вы не можете напрямую редактировать html.

Мой вопрос: Возможно ли это добавить атрибут data-cfasync = "false" через фильтр PHP или действие в мои сценарии? Так это будет выглядеть так:

<script data-cfasync="false" src="/javascript.js"></script>

Я попробовал фильтр ниже, но не сработал ..

    add_filter( 'script_loader_tag', function ( $tag, $handle ) {

    if ( 'jquery.min.js' !== $handle )
        return $tag;

    return str_replace( "type='text/javascript' src", ' data-cfasync="false" src', $tag     );
}, 10, 2 );

Ответы [ 2 ]

1 голос
/ 27 марта 2020

Дескриптор - это не имя файла, а имя, указанное в очереди сценариев.

add_filter( 'script_loader_tag', function ( $tag, $handle ) {

    if ( 'jquery-core' !== $handle )
        return $tag;

    return str_replace( "type='text/javascript' src", ' data-cfasync="false" src', $tag     );
}, 10, 2 );

Дескрипторы сценариев находятся в \ wp-includes \ script-loader. php строка 751

// jQuery.
    $scripts->add( 'jquery', false, array( 'jquery-core', 'jquery-migrate' ), '1.12.4-wp' );
    $scripts->add( 'jquery-core', '/wp-includes/js/jquery/jquery.js', array(), '1.12.4-wp' );
    $scripts->add( 'jquery-migrate', "/wp-includes/js/jquery/jquery-migrate$suffix.js", array(), '1.4.1' );

    // Full jQuery UI.
    $scripts->add( 'jquery-ui-core', "/wp-includes/js/jquery/ui/core$dev_suffix.js", array( 'jquery' ), '1.11.4', 1 );
    $scripts->add( 'jquery-effects-core', "/wp-includes/js/jquery/ui/effect$dev_suffix.js", array( 'jquery' ), '1.11.4', 1 );
0 голосов
/ 27 марта 2020

Аргумент файла $handle - это уникальное имя очереди, а не имя источника скрипта. Вы используете хук script_loader_tag с 2 аргументами. Используйте его с 3 аргументами и добавьте аргумент $src, чтобы вам не пришлось использовать str_replace() в функции обратного вызова.

add_filter('script_loader_tag', 'add_cfasync_data_attribute', 10, 3);
function add_cfasync_data_attribute($tag, $handle, $src) {

    /* add all the scripts that you want to append the data-cfasync="false" in the array */
    if ( !in_array($handle, array('jquery', 'jquery-core' 'your-script-handle') )
        return $tag;

    /* change the script tag by adding data-cfasync="false" and return it. */
    $tag = '<script data-cfasync="false" src="' . esc_url( $src ) . '"></script>';
    return $tag;
}
...