1

プラグインの設定ファイル内から条件 is_page() に基づいてファイル (javascript とスタイル) をエンキューする方法を見つけようとしています。ここ 1 週間、私はオンラインで見つけた無数の中から有効な解決策を見つけようとしています。

ファイルのオリジナルは次のとおりです。

public function enqueue_files() {
        wp_enqueue_script("jquery");
        wp_enqueue_style("wpsqt-main",plugins_url('/css/main.css',WPSQT_FILE));
    }

これが私が試みたものです:

public function enqueue_files() {
if ( is_page(xxx) ) {
        wp_enqueue_script("jquery");
        wp_enqueue_style("wpsqt-main",plugins_url('/css/main.css',WPSQT_FILE));
    }
}

テストif ( is_page() )すると、すべてのページのヘッダーからスクリプトとスタイルが削除されます。ただし、それを : に変更すると if ( !is_page() )、元に戻されます。変?

  1. 条件を含める方法はありますか?
  2. パブリック関数部分は、条件の読み取り方法を変更しますか?
  3. プラグインの構成ファイルからエンキューを削除し、それを function.php ファイルに配置して、プラグインが更新されるたびに変更を加える必要がないようにすることは可能ですか?

ファイルは次のとおりです (ファイルをエンキューする呼び出しは一番下にあります): http://pastebin.com/sDt4sTCH

使用されているコンテキストを取得できるように、実際のファイルを含めました。よろしくお願いします!! より良いコード形式を編集

4

1 に答える 1

1

クエリが実行される前に is_page() を呼び出すのが早すぎるため、テストに使用できる $post がありません。この場合、if (not is_page()) は常に true になります。これを回避する方法は、ヘッダーではなくフッターにスクリプトを挿入することです (クエリがあった後)。<?php wp_footer() ?>通常は前に、ウェブサイトのフッターに含める必要があることに注意してください</body>

class MyPlugin {
    //In the constructor we want to set a few methods as action callbacks
    public function __construct () {
        add_action('init', array(&$this, 'register_my_scripts'));
        add_action('wp_print_footer_scripts', array(&$this, 'print_my_scripts'));
    }

    //This method is called by init, and registers our plugin scripts for later use
    public function register_my_scripts () {
        wp_enqueue_style("wpsqt-main",plugins_url('/css/main.css',WPSQT_FILE));
    }

    //This method is called by wp_print_footer_scripts, and prints our <script> through wp_footer()
    public function print_my_scripts () {
        //Only render the script on specific pages
        if ( is_page(xxx) ) {
            wp_print_scripts("wpsqt-main", array('jquery'));
        }
    }
}

または、グローバル変数を使用して、スクリプトを出力したい場所で単に true に設定することもできます。たとえば、ページ名がわからない場合。上記の print_my_scripts メソッドをこのメソッドに置き換えるだけです。

public function print_my_scripts () {
    global $print_my_script;
    //Only render the script on pages which have asked for it
    if ($print_my_script) {
        wp_print_scripts("wpsqt-main", array('jquery'));
    }
}

そして、これを任意のショートコード、ウィジェット、ページ テンプレートなどに追加して、スクリプトにショートコード、ウィジェット、テンプレートなどを使用してページに印刷するように指示します。

global $print_my_script ;
$print_my_script = true ;
于 2012-07-01T22:21:46.740 に答える