web-dev-qa-db-ja.com

プラグイン内で無料のスクリプトとスタイルのテンプレートを作成する

私がイムがやろうとしていることを説明させてください。ダッシュボードのようなメインページを持つプラグインを作成して、プラグインの一般公開側を管理するために使用します。通常のWordPressサイト内の別のアプリのように考えてください。

そのページは完全にカスタムになるので、ユーザーテーマから完全に分離する必要があります。管理バーが使われます。

私が最初に考えたのはカスタムテンプレートを使ってページを作成すること(すでにそれが済んだこと)で、2番目のステップはwp_header + wp_footerからすべてのアクションを削除し、WordPressコアではないスクリプトとスタイルをすべて削除することです。

そのため、現在Imはステップ2で立ち往生していましたが、これを実行する別の方法があるのか​​どうかImにはありませんでした。

1
chifliiiii

これは私が今までやってきたことです、私がまだ知らないより良いアプローチがあるならば私はまだ正しい答えとしてマークしません。

add_action('wp_enqueue_scripts',array( $this, 'remove_all_actions'), 99);
public function remove_all_actions(){
        if( 'custom-template.php' != get_page_template_slug( get_queried_object_id() ))
            return;
        global $wp_scripts, $wp_styles;

        $exceptions = array(
            'admin-bar',
            'jquery',
            'query-monitor'
        );

        foreach( $wp_scripts->queue as $handle ){
            if( in_array($handle, $exceptions))
                continue;
            wp_dequeue_script($handle);
        }

        foreach( $wp_styles->queue as $handle ){
            if( in_array($handle, $exceptions) )
                continue;
            wp_dequeue_style($handle);
        }

        // Now remove actions
        $action_exceptions = array(
            'wp_print_footer_scripts',
            'wp_admin_bar_render',

        );

        // No core action in header
        remove_all_actions('wp_header');

        global $wp_filter;
        foreach( $wp_filter['wp_footer'] as $priority => $handle ){

            if( in_array( key($handle), $action_exceptions ) )
                continue;
            unset( $wp_filter['wp_footer'][$priority] );
        }

    }
0
chifliiiii

ページの管理バーだけを提供するのは少し奇妙に思えますが、私が考えることができる最も簡単な解決策は、スクリプト/スタイルの登録を解除し、この特定のページのカスタムテンプレートファイルを作成するための条件付き関数の使用です。残念ながら、ロードされているすべてのスタイル/スクリプトを把握する必要があります。

add_action('init', 'remove_all_the_things');

function remove_all_the_things() {

  if (is_page(123)) {
    wp_dequeue_style('main');
    wp_dequeue_script('jquery');
    // etc
    // remove other actions/filters as well
  }
}

そしてカスタムヘッダー/フッターを作成することができます

header-empty.phpfooter-empty.php

ページテンプレートでget_header('empty');get_footer('empty');を呼び出す

参照:

https://codex.wordpress.org/Function_Reference/is_pagehttps://codex.wordpress.org/ Function_Reference/wp_dequeue_scripthttps://codex.wordpress.org/Function_Reference/wp_dequeue_stylehttps://codex.wordpress.org/Function_Reference/get_headerhttps://codex.wordpress.org/Function_Reference/get_footer

1
JoshuaDoshua