web-dev-qa-db-fra.com

Empêcher le chargement de CSS/JS quand le plugin n'est pas utilisé

J'ai un thème Wordpress (the7) qui inclut le plugin Visual Composer. C’est bon pour mes clients qui éditent des éléments dans le back-end, mais cela ajoute également des CSS et JS inutiles à chaque chargement de page sur le front-end. Comment puis-je les supprimer?

Les lignes qu'il ajoute sont:

<link rel='stylesheet' id='js_composer_front-css'  href='[domain]/wp-content/plugins/js_composer/assets/css/js_composer.min.css?ver=5.0.1' type='text/css' media='all' />

<script type='text/javascript' src='[domain]/wp-content/plugins/js_composer/assets/js/dist/js_composer_front.min.js?ver=5.0.1'></script>

J'ai trouvé cette question qui donne une méthode possible, mais je ne peux pas la faire fonctionner.

J'ai traqué d'où le fichier CSS spécifique est chargé, c'est dans une classe Vc_Base dans cette fonction:

public function enqueueStyle() {
    $post = get_post();
    if ( $post && preg_match( '/vc_row/', $post->post_content ) ) {
        wp_enqueue_style( 'js_composer_front' );
    }
    wp_enqueue_style( 'js_composer_custom_css' );
}

Donc, j'ai mis cela en place dans mon functions.php:

function inf_remove_junk()
{
    wp_dequeue_style('js_composer_front');
    wp_dequeue_style('js_composer_custom_css');
    wp_dequeue_script('wpb_composer_front_js');

    // also tried this
    remove_action('wp_enqueue_scripts', array('Vc_Base', 'enqueueStyle'));
}

if (!is_admin()) {
    add_action('wp_head', 'inf_remove_junk');
}

La fonction inf_remove_junk s'exécute définitivement, mais elle ne supprime pas le CSS. At-il besoin de s’accrocher à un point différent ou de faire autre chose?

1
DisgruntledGoat

Vous devez utiliser l'action wp_enqueue_scripts sauf wp_head comme:

function inf_remove_junk() {
    if (!is_admin()) {
          wp_dequeue_style('js_composer_front');
          wp_dequeue_style('js_composer_custom_css');
          wp_dequeue_script('wpb_composer_front_js');
     }

}

add_action( 'wp_enqueue_scripts', 'inf_remove_junk' );

Mais cela enlève les scripts du front-end.

  1. Je pense que sur les pages d'archives, VC n'exécute pas son shortcode. Vous pouvez donc vérifier la condition is_archive () à la place de is_admin ().

  2. Ou vous pouvez vérifier le shortcode du contenu et supprimer des actifs tels que:

    fonction inf_remove_junk () {

    // 1. Check shortcode exist in post content and disable scripts.
            global $post;
            if ( stripos($post->post_content, '[YOUR_SHORTCODE]') ) {
    
    // or
    
    // 2. Disable scripts on all pages except single page, post, custom Post etc.
    
            if ( ! singular() ) {
    
    // or
    
    // 3. Disable on archive, 404 and search page
            if ( is_archive() || is_404() || is_search() ) {
                  wp_dequeue_style('js_composer_front');
                  wp_dequeue_style('js_composer_custom_css');
                  wp_dequeue_script('wpb_composer_front_js');
             }     
    

    } add_action ('wp_enqueue_scripts', 'inf_remove_junk');

En outre, pour un support de plugin premium, vous devez contacter l'auteur du plugin pour une meilleure réponse.

1
maheshwaghmare

Vous devez vous assurer que les scripts et les styles après sont mis en file d'attente. Sinon, votre code semblera ne rien faire. En réalité, le script est correctement mis en file d'attente, mais il est ajouté à nouveau plus tard.

Vous ne dites pas sur quel hook ils sont mis en file d'attente, mais si c'est wp_enqueue_scripts à la priorité par défaut, cela devrait fonctionner en les mettant en file d'attente avec une priorité inférieure.

//* Dequeue scripts and styles
function wpse_106269_wp_enqueue_scripts() {
    wp_dequeue_style( 'js_composer_front' );
    wp_dequeue_style( 'js_composer_custom_css' );
    wp_dequeue_script( 'wpb_composer_front_js' );
}

//* Make sure we dequeue scripts and styles after they are enqueued
function wpse_106269_wp_head() {
  add_action( 'wp_enqueue_scripts', 'wpse_106269_wp_enqueue_scripts', 20 );
}

//* wp_head is only fired on public pages
add_action( 'wp_head', 'wpse_106269_wp_head');
0
Nathan Johnson