Як додати тег defer = “defer” у javascripts-плагіні?


29

Не вдалося додати тег відкладання в javascripts плагіну. Тест сторінки швидкістю розробника Google пропонує мені додати тег відкладання у контактній формі 7 javascripts.

Ось як контактна форма 7 включає javascript у заголовку.

add_action( 'wp_enqueue_scripts', 'wpcf7_enqueue_scripts' );

function wpcf7_enqueue_scripts() {
    // jquery.form.js originally bundled with WordPress is out of date and deprecated
    // so we need to deregister it and re-register the latest one
    wp_deregister_script( 'jquery-form' );
    wp_register_script( 'jquery-form', wpcf7_plugin_url( 'jquery.form.js' ),
        array( 'jquery' ), '2.52', true );

    $in_footer = true;
    if ( 'header' === WPCF7_LOAD_JS )
        $in_footer = false;

    wp_enqueue_script( 'contact-form-7', wpcf7_plugin_url( 'scripts.js' ),
        array( 'jquery', 'jquery-form' ), WPCF7_VERSION, $in_footer );

    do_action( 'wpcf7_enqueue_scripts' );
}

Тепер, як додати тег defer = "defer" у вищевказаний код?


2
Відповідний квиток: core.trac.wordpress.org/ticket/12009
scribu

1
Приємне запитання @Viruthagiri.
Рамкумар М

Відповіді:


57

На WordPress 4.1 є фільтр script_loader_tag. Ви можете використовувати його для пошуку правильного сценарію:

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

    if ( 'contact-form-7' !== $handle )
        return $tag;

    return str_replace( ' src', ' defer="defer" src', $tag );
}, 10, 2 );

Стара відповідь

Немає спеціального фільтра в наявності ... принаймні я його не бачу. Але ...

  • wp_print_scripts() дзвінки WP_Scripts->do_items()
  • який дзвонить WP_Scripts->do_item()
  • який використовує esc_url()
  • який робить пропонують фільтр: 'clean_url'.

А ось і ми:

function add_defer_to_cf7( $url )
{
    if ( FALSE === strpos( $url, 'contact-form-7' )
      or FALSE === strpos( $url, '.js' )
    )
    { // not our file
        return $url;
    }
    // Must be a ', not "!
    return "$url' defer='defer";
}
add_filter( 'clean_url', 'add_defer_to_cf7', 11, 1 );

Caveat: не перевірена, просто ідея. :)

Оновлення

Я написав і протестував плагін з цим кодом. Дивіться https://gist.github.com/1584783


Це ідеально також для використання з даними основної інформації в Requjs
Nicola Peluchetti

Це приємний злом, і так просто. Я вважаю, що було б добре також додавати charset = 'utf-8', коли це необхідно!
webaware


@henrywright WordPress додати 'по обидва боки повернутої рядки, а це "призведе до невірного HTML.
fuxia

2
Можливо, хорошою ідеєю у випадку, якщо хтось захоче перетворити це на роботу з іншими сценаріями, буде переконатися у валідації, щоб використовувати його лише на шрифті, можливо використання if( ! is_admin() ){}популярних плагінів, таких як ACF, може призвести до головного болю.
crissoca
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.