web-dev-qa-db-ja.com

テーマのスタイルとスクリプトをデキュー/登録解除する方法

私のプラグインに、これまでにアクティブにしたテーマからスタイルとスクリプトをデキュー/登録解除させる方法はありますか?どのテーマがインストールされるかは関係ありません。そのテーマのスタイルとスクリプトはデキュー/登録解除されますか?

明確にするために:

  1. どんなテーマを使うかわかりません。
  2. 他のプラグインからではなく、テーマからスタイルとスクリプトのみをデキュー/登録解除する必要があります。
1
user315338

トリッキーなことは、特定のスクリプトまたはスタイルがテーマによってエンキューされたかどうかを知ることです。

テーマとプラグインはどちらも同じフックと関数を使用するため、特定のテーマまたはプラグインに属するものとして明示的にラベル付けされていません。これは、スクリプトまたはスタイルがテーマに由来するかどうかを知る唯一の方法は、URLをチェックして、スクリプト/スタイルのURLがテーマディレクトリのどこかを指しているかどうかを確認することであることを意味します。

これを行う1つの方法は、_$wp_scripts->registered_と_$wp_styles->registered_をループし、各スクリプトのURLとスタイルをget_theme_root_uri()と照合して、テーマフォルダーのURLを確認することです。スクリプト/スタイルがそのフォルダー内にあるように見える場合は、それをデキューできます。

_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 );
_

これは、スタイルシートまたはスクリプトがテーマ内にある場合にのみ機能します。テーマがCDNからスクリプトまたはスタイルをエンキューしている場合、それらをターゲットにすることが可能かどうかはわかりません。

1
Jacob Peattie

これはあなたを助けるでしょう。試す

#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' );

テーマのスタイルとスクリプトのみを削除するには、以下を試してください:

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);

うまくいくかどうか教えてください。私はこのコードをテストしました。それは魅力のように動作します:-)

ありがとうございました!

0
Chetan Vaghela