wake-up-neo.com

So entfernen Sie die Abmeldung / Abmeldung von Themenstilen und Skripten

Ist es einigen möglich, mein Plugin dazu zu bringen, Stile und Skripte von jedem aktivierten Thema zu entfernen/abzumelden? Es spielt also keine Rolle, welches Thema installiert wird. Die Stile und Skripte dieses Themas werden aus der Warteschlange entfernt/abgemeldet.

Nur um ganz klar zu sein:

  1. Ich weiß nicht, welches Thema verwendet wird.
  2. Ich muss nur die Stile und Skripte aus dem Thema und nicht aus anderen Plugins entfernen/abmelden.
1
user315338

Das Schwierige ist, zu wissen, ob ein bestimmtes Skript oder ein bestimmter Stil von dem Thema in die Warteschlange gestellt wurde oder nicht.

Themen und Plugins verwenden beide dieselben Hooks und Funktionen, sodass sie in keiner Weise explizit als zu einem bestimmten Thema oder Plugin gehörend gekennzeichnet sind. Dies bedeutet, dass die einzige Möglichkeit, festzustellen, ob ein Skript oder ein Stil aus dem Thema stammt, darin besteht, die URL zu überprüfen, um festzustellen, ob die URL des Skripts/Stils auf eine Stelle im Themenverzeichnis verweist.

Eine Möglichkeit, dies zu tun, besteht darin, $wp_scripts->registered Und $wp_styles->registered Zu durchlaufen und die URL jedes Skripts und Stils mit get_theme_root_uri() zu vergleichen, die Ihnen die URL zum Themenordner angibt . Wenn sich das Skript/der Stil in diesem Ordner befindet, können Sie ihn aus der Warteschlange entfernen:

function wpse_340767_dequeue_theme_assets() {
    $wp_scripts = wp_scripts();
    $wp_styles  = wp_styles();
    $themes_uri = get_theme_root_uri();

    foreach ( $wp_scripts->registered as $wp_script ) {
        if ( strpos( $wp_script->src, $themes_uri ) !== false ) {
            wp_deregister_script( $wp_script->handle );
        }
    }

    foreach ( $wp_styles->registered as $wp_style ) {
        if ( strpos( $wp_style->src, $themes_uri ) !== false ) {
            wp_deregister_style( $wp_style->handle );
        }
    }
}
add_action( 'wp_enqueue_scripts', 'wpse_340767_dequeue_theme_assets', 999 );

Dies funktioniert nur, wenn sich das Stylesheet oder Skript im Thema befindet. Wenn das Thema Skripte oder Stile aus einem CDN in die Warteschlange stellt, bin ich mir nicht sicher, ob es möglich ist, diese gezielt zu verwenden.

1
Jacob Peattie

Vielleicht hilft dir das. Versuchen

#For dequeue JavaScripts
function remove_unnecessary_scripts() {
    # pass Name of the enqueued js.
    # dequeue js
    wp_dequeue_script( 'toaster-js' );
     # deregister js
    wp_deregister_script( 'toaster-js' );
}
add_action( 'wp_print_scripts', 'remove_unnecessary_scripts' );

#For dequeue Styles 
function remove_unnecessary_styles() {
    # pass Name of the enqueued stylesheet.
    # dequeue style
    wp_dequeue_style( 'custom-style' );
    # deregister style
    wp_deregister_style( 'custom-style' );
}
add_action( 'wp_print_styles', 'remove_unnecessary_styles' );

Für Nur Themenstile und Skripte entfernen können Sie unten versuchen:

function remove_all_scripts_from_theme() {
    global $wp_scripts;
    # remove all js
    // $wp_scripts->queue = array();
    foreach( $wp_scripts->queue as $handle ) {

        if (strpos($wp_scripts->registered[$handle]->src, '/themes/') !== false) {
            # dequeue js
              wp_dequeue_script( $handle );
                # deregister js
               wp_deregister_script( $handle);
            }
        }

}
add_action('wp_print_scripts', 'remove_all_scripts_from_theme', 100);

function remove_all_styles_from_theme() {
    global $wp_styles;
     # remove all css
   // $wp_styles->queue = array();

    foreach( $wp_styles->queue as $handle ) {

        if (strpos($wp_styles->registered[$handle]->src, '/themes/') !== false) {
            # dequeue js
              wp_dequeue_style( $handle );
                # deregister js
               wp_deregister_style( $handle);
            }
        }

}
add_action('wp_print_styles', 'remove_all_styles_from_theme', 100);

lass es mich wissen, ob es funktioniert oder nicht. Ich habe diesen Code getestet. es funktioniert wie ein Zauber :-)

Vielen Dank!

0
Chetan Vaghela