web-dev-qa-db-fra.com

Annuler l'enregistrement des scripts sur les pages inutiles à l'aide de remove_action

À tous les votants proches:Cette question n'est pas une copie, car je dois supprimer tous les scripts ajoutés par le plugin à l'aide de remove_action.

Dans Très obstiné wp_register_script/add_action vs remove used wp_dequeue_script pour supprimer les scripts un par un, mais je dois les supprimer tous (qui ont été ajoutés par le plugin à l'aide de add_action) à l'aide de remove_action!

La fonction wp_dequeue_script ne peut pas supprimer le code personnalisé de la manière suivante:

add_action('wp_head', 'print_style');

function print_style() {
    echo '<style>body { margin: 0; }</style>';
}

J'ai installé WP plug-in Polls. Je l'utilise dans certaines pages et j'ai besoin de désenregistrer ses styles et scripts sur d'autres pages.

J'ai trouvé du code dans le plugin qui enregistre les scripts:

Fonction: Enqueue Polls JavaScripts/CSS

add_action('wp_enqueue_scripts', 'poll_scripts');
function poll_scripts() {
    // code
}

Donc, pour annuler l'enregistrement de ses scripts, j'utilise le code suivant dans mon fichier functions.php:

add_action( 'wp_enqueue_scripts', 'deregister_polls_scripts_and_styles' );

function deregister_polls_scripts_and_styles() {
    if ( is_home() ) {
        remove_action( 'wp_enqueue_scripts', 'poll_scripts');
    }
}

Il faut donc désenregistrer les scripts de sondage sur la page d'accueil, mais pas l'identifiant. Qu'est ce que je fais mal?

P.S. 1

Les scripts suppriment dans ce cas:

add_action( 'after_setup_theme', 'wc_deregister_polls_scripts_and_styles' );

function wc_deregister_polls_scripts_and_styles() {
    remove_action('wp_enqueue_scripts', 'poll_scripts');
    remove_action('wp_head', 'poll_head_scripts');
}

Mais je dois l'enlever sur certaines pages comme ceci:

add_action( 'after_setup_theme', 'wc_deregister_polls_scripts_and_styles' );

function wc_deregister_polls_scripts_and_styles() {
    if ( is_page('developers') ) {
        remove_action('wp_enqueue_scripts', 'poll_scripts');
        remove_action('wp_head', 'poll_head_scripts');
    }
}

Donc, dans ce cas, cela ne fonctionne pas.

J'ai installé un autre plugin et tout fonctionne bien dans ce cas. Mêmes actions, MAIS tout fonctionne:

add_action( 'wp_enqueue_scripts', 'wc_deregister_scripts_and_styles' );

function wc_deregister_scripts_and_styles() {
    if ( !is_home() && !is_tax('brand') ) {
        remove_action( 'wp_enqueue_scripts', 'uag_frontend_styles', 999 );
        remove_action( 'wp_footer', 'uag_footer_scripts');
    }
}

P. S. 2

Ceci est un autre plugin.

add_action('wp_enqueue_scripts', 'uag_frontend_styles', 999);
function uag_frontend_styles() {

    /* main stylesheet */
    wp_register_style( 'uag_style', uag_url . 'css/uag.css');
    wp_enqueue_style('uag_style');
    }

C'est des sondages:

add_action('wp_enqueue_scripts', 'poll_scripts');
function poll_scripts() {
    global $text_direction;
    if(@file_exists(get_stylesheet_directory().'/polls-css.css')) {
        wp_enqueue_style('wp-polls', get_stylesheet_directory_uri().'/polls-css.css', false, '2.63', 'all');
    } else {
        wp_enqueue_style('wp-polls', plugins_url('wp-polls/polls-css.css'), false, '2.63', 'all');
    }
    if('rtl' == $text_direction) {
        if(@file_exists(get_stylesheet_directory().'/polls-css-rtl.css')) {
            wp_enqueue_style('wp-polls-rtl', get_stylesheet_directory_uri().'/polls-css-rtl.css', false, '2.63', 'all');
        } else {
            wp_enqueue_style('wp-polls-rtl', plugins_url('wp-polls/polls-css-rtl.css'), false, '2.63', 'all');
        }
    }
    $poll_ajax_style = get_option('poll_ajax_style');
    $pollbar = get_option('poll_bar');
    wp_enqueue_script('wp-polls', plugins_url('wp-polls/polls-js.js'), array('jquery'), '2.63', true);
// Other same code
}
1
Alexander

Une action peut être supprimée dans le temps écoulé, car elle y est ajoutée. Donc, après est ajouté, avant est renvoyé.

Vous dites que le plugin a ce code:

add_action('wp_enqueue_scripts', 'poll_scripts');

function poll_scripts() {
    // code
}

Mais vous ne dites pas si ce code est dans une fonction accrochée quelque part.

Si c'est pas dans n'importe quelle fonction, l'action est ajoutée dès que les plugins sont chargés, donc vous (donc avant que le thème ne soit chargé), donc si vous le faites depuis un thème, vous pouvez supprimer cette action partout avant wp_head(), Le premier crochet disponible sur le thème est after_setup_theme,

Donc, celui-ci fonctionnera:

add_action('template_redirect', 'remove_poll_scripts');

function remove_poll_scripts() {
  if ( is_home() ) remove_action('wp_enqueue_scripts', 'poll_scripts');
}

si vous écrivez simplement dans votre functions.php

remove_action('wp_enqueue_scripts', 'poll_scripts');

Cela fonctionnera car functions.php est chargéaprèsle plug-in etbefore'wp_enqueue_scripts' est déclenché: vous êtes donc parfaitement à l'heure mais vous ne pouvez pas vérifier dans quelle page supprimer les scripts.

De plus, si vous essayez de faire exactement la même chose depuis un plugin et que vous écrivez dans votre fichier de plugin

remove_action('wp_enqueue_scripts', 'poll_scripts');

canfail: personne ne peut garantir que votre plugin n'est pas chargé avant le plugin qui ajoute le script et dans ce cas, vous essayez de supprimer l'action avant de l'ajouter. .

2
gmazzap

Juste une pensée ici - essayez de reculer la priorité sur votre action. Sans la priorité, la valeur par défaut sera 10, comme pour l'enregistrement d'origine. En raison du fonctionnement des thèmes enfants, cela signifie que vous déclenchez le désenregistrement avant que le registre/la mise en file d'attente ait lieu.

add_action( 'wp_enqueue_scripts', 'deregister_polls_scripts_and_styles', 99 );
0
Imperative Ideas