web-dev-qa-db-ja.com

Is_page()を使用して特定のページにのみJSおよびCSSをロードする方法

私は最初のWPプラグインを作成しています。プラグイン管理領域で利用可能なフォームを通して選択された特定のページにのみいくつかのJSとCSSファイルをロードするはずです。フォームで選択されると、ページタイトルはDBのwp_optionsテーブルに格納され、データは$ page_selectedという名前の変数に格納されます。フォームで選択したページにのみJSファイルとCSSファイルをロードするには、is_page()関数を使用して、$ page_selected変数をパラメータとして渡したいと思いました。

 function my_custom_tooltip() {
    if (  is_page($page_selected) ) {
        wp_enqueue_style( 'custom_tooltip_frontend_css', plugins_url('custom-image-tooltip/custom-image-tooltip.css') );
        wp_enqueue_script( 'custom_tooltip_frontend_js', plugins_url('custom-image-tooltip/custom-image-tooltip.js'), array('jquery'), '', true );
    }
} add_action('wp_enqueue_scripts', 'my_custom_tooltip');

不幸なことに、私の場合、条件文は正しく機能しません。ユーザーがフォームで選択したページを現在表示されているページと一致させて、同じ結果を得る方法はありますか?

6
RaymondMik

$page_selectedがページタイトルを含む文字列を返す場合、それはうまくいくはずです。私はそれをテストしました、そしてis_page()はページタイトル、ページIDとスラッグを受け入れます。

あなたが問題に直面しているのなら、データベースにページIDを保存してis_page()でそれを使うほうが良いでしょう。

この条件文に渡すことができる引数の詳細については https://codex.wordpress.org/Function_Reference/is_page を参照してください。

4
Puneet Sahalot

私はいくつかのかなりの変更を加えます、そして私はこれがあなたのお役に立つことを願っています。以下のコードを試してください。

function my_custom_tooltip() {
  wp_enqueue_style( 'custom_tooltip_frontend_css', plugins_url('custom-image-tooltip/custom-image-tooltip.css') );
  wp_enqueue_script( 'custom_tooltip_frontend_js', plugins_url('custom-image-tooltip/custom-image-tooltip.js'), array('jquery'), '', true );
} 

if(is_page($page_selected)){
    add_action('wp_enqueue_scripts', 'my_custom_tooltip');
}

ここで、$page_selectedについて確認してください。

注: テンプレートファイルではなく、常にテーマのfunctions.phpファイルにenqueue自分のスクリプトを含める必要があります。テンプレートファイルはちょうど良い場所ではありません99.9%

is_page()は、次のように複数の形式で使用できます。

// When any single Page is being displayed.
is_page();

// When Page 42 (ID) is being displayed.
is_page( 42 );

// When the Page with a post_title of "Contact" is being displayed.
is_page( 'Contact' );

// When the Page with a post_name (slug) of "about-me" is being displayed.
is_page( 'about-me' );

// Returns true when the Pages displayed is either post ID 42, or post_name "about-me", or post_title "Contact".  
is_page( array( 42, 'about-me', 'Contact' ) );

注: 配列機能はバージョン2.5で追加されました。

このコードをテンプレートファイル内で実行している場合は、問題なく動作しますが、このコードがfunctions.phpまたはプラグインファイルに含まれていると、 debug.log にこのエラーが発生します。

PHPに関するお知らせ:is_pageは と誤って と呼ばれていました。条件付き照会タグは、照会が実行される前には機能しません。それ以前は、常にfalseを返していました。

この場合、 here で説明されているように、 template_redirect actionフックを使用できます。

0
Lucas Miranda

テストされていない...しかし、現在表示されているページの名前(つまりスラグ)を取得するには、このようなものが機能するはずです。

function my_custom_tooltip() {
    global $post;
    if ( is_object( $post ) && $post->post_type=='page' ) {
        if ( $post->post_name == $page_selected ) {
            wp_enqueue_style( 'custom_tooltip_frontend_css', plugins_url('custom-image-tooltip/custom-image-tooltip.css') );
            wp_enqueue_script( 'custom_tooltip_frontend_js', plugins_url('custom-image-tooltip/custom-image-tooltip.js'), array('jquery'), '', true );
        }
    }
}

$page_selectedとの比較は、もちろんそれが "slug"フォーマットであることを期待しています...あるいはページタイトルと比較するなら$post->post_titleの代わりに$post->post_nameを使うことができます。

注意してください、これはPHPクラスを使うことがその関数の中で大域変数($page_selected)を使う必要を避けるために役に立つ例です...

0
C C