私のプラグインに、これまでにアクティブにしたテーマからスタイルとスクリプトをデキュー/登録解除させる方法はありますか?どのテーマがインストールされるかは関係ありません。そのテーマのスタイルとスクリプトはデキュー/登録解除されますか?
明確にするために:
トリッキーなことは、特定のスクリプトまたはスタイルがテーマによってエンキューされたかどうかを知ることです。
テーマとプラグインはどちらも同じフックと関数を使用するため、特定のテーマまたはプラグインに属するものとして明示的にラベル付けされていません。これは、スクリプトまたはスタイルがテーマに由来するかどうかを知る唯一の方法は、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からスクリプトまたはスタイルをエンキューしている場合、それらをターゲットにすることが可能かどうかはわかりません。
これはあなたを助けるでしょう。試す
#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);
うまくいくかどうか教えてください。私はこのコードをテストしました。それは魅力のように動作します:-)
ありがとうございました!