Como desenfileirar adequadamente scripts e estilos no tema filho?

11

Criei um tema pai e um filho em um dos meus projetos. Enfileirei CSS e JavaScripts no meu tema principal, como abaixo:

function project_necessary_scripts() {
    //Stylesheets
    wp_register_style( 'bootstrap-css', get_template_directory_uri() .'/css/bootstrap.min.css' );
    wp_register_style( 'bootstrap-map', get_template_directory_uri() .'/css/bootstrap.css.map' );
    wp_register_style( 'project-css', get_stylesheet_uri() );

    wp_enqueue_style( 'bootstrap-css' );
    wp_enqueue_style( 'bootstrap-map' );
    wp_enqueue_style( 'project-css' );

    //JavaScripts
    wp_register_script( 'modernizr-js', get_template_directory_uri() .'/js/modernizr-2.8.3.min.js', array(), '2.8.3' );
    wp_register_script( 'project-js', get_template_directory_uri() .'/js/project.min.js', array('jquery'), '20150401', true );

    wp_enqueue_script( 'modernizr-js' );
    wp_enqueue_script( 'project-js' );
}
add_action( 'wp_enqueue_scripts', 'project_necessary_scripts' );

Agora, no meu tema Filho , quero desenfileirar algumas folhas de estilo e javascripts. Então, eu usei o seguinte código:

function project_dequeue_unnecessary_scripts() {
    wp_dequeue_style( 'bootstrap-map' );
    wp_dequeue_script( 'modernizr-js' );
    wp_dequeue_script( 'project-js' );
}
add_action( 'wp_print_scripts', 'project_dequeue_unnecessary_scripts' );

Mas, na verdade, o bootstrap.css.maparquivo ainda está na fila, mas o modernizr-js project-js não está carregando, portanto está funcionando parcialmente. Como posso resolver isso?

Eu até tentei prioridades de ação:

add_action( 'wp_print_scripts', 'project_dequeue_unnecessary_scripts', 11 );
Mayeenul Islam
fonte

Respostas:

24

Você está muito mais próximo da solução, porque está no caminho certo. Apenas para ajustar um pouco:

Existem dois ganchos de ação:

  1. wp_print_scriptse
  2. wp_print_styles

Portanto, a maneira como você pode fazer isso é: conecte-os de maneira diferente:

//Dequeue Styles
function project_dequeue_unnecessary_styles() {
    wp_dequeue_style( 'bootstrap-map' );
        wp_deregister_style( 'bootstrap-map' );
}
add_action( 'wp_print_styles', 'project_dequeue_unnecessary_styles' );

//Dequeue JavaScripts
function project_dequeue_unnecessary_scripts() {
    wp_dequeue_script( 'modernizr-js' );
        wp_deregister_script( 'modernizr-js' );
    wp_dequeue_script( 'project-js' );
        wp_deregister_script( 'project-js' );
}
add_action( 'wp_print_scripts', 'project_dequeue_unnecessary_scripts' );

E a maneira correta é cancelar o registro deles ao lado da remoção da fila. Então, desenfileire-os primeiro e depois cancele o registro de acordo.

Mayeenul Islam
fonte
de acordo com a documentação : Desde o WordPress 3.3, o wp_print_scripts não deve ser usado para enfileirar estilos ou scripts. Use wp_enqueue_scripts em vez disso.
Rok 05/02
@ user1264304 Não estamos enfileirando coisas aqui, estamos desenfileirando coisas.
Mayeenul Islam
1
sim, mas de acordo com a ligação , deve-se usaradd_filter( 'wp_enqueue_scripts', 'project_dequeue_unnecessary_scripts')
rok