特定のページにのみコードを含める方法は?


14

プラグインとショートコードについて学んでいます。プラグインをアクティブにすると、そのコードがすべてのページ(ショートコードのないページを含む)に読み込まれることに気付きました。(コンテンツと管理ページを意味するものではありません)。一部のコンテンツページでは特定のショートコードを使用し、他のコンテンツページでは使用しませんが、いずれにしてもプラグインのコードがロードされます。プラグインがショートコードが使用されているページにのみ含まれるようにするにはどうすればよいですか?

もっと詳しく:

ライトボックスを作成するプラグインがあるとしましょう。プラグインをアクティブにします。「Cool Images」ページで、ショートコードを使用してライトボックスを作成します。ライトボックスショートコードを使用しない[About]ページで[View Source]をチェックすると、ライトボックスプラグインのコードがロードされていることがわかります。プラグインを記述すると、必要なページにのみコードが読み込まれるようになり、ページの読み込みが速くなります。これは可能ですか?そうでない場合、ページに不必要にロードされる多くのプラグインのコードがあります。何か案は?


1
何かをキューに入れようとしていますか、それともショートコードがあるページでPHPスクリプトを実行しようとしていますか?
mor7ifer

+1 @ m0r7if3r-私も理解したいと思います..アプローチは非常に異なるだろう
-krembo99

@ mrOr7if3r、メッセージをありがとう。たとえば、Google Mapsプラグインを持っているとしましょう。そのプラグインはすべてのページ、つまりプラグインを使用しないページにロードする必要がありますか?Googleマップのショートコードがない「About」ページがあるとします。ソースの表示を見ると、プラグインのコードがそのページにロードされていることがわかります(イベントは使用していませんが)。プラグインのコードはすべてのページにロードする必要がありますか?ありがとう。
ラクミディ

WPが任意の時点でスクリプトをキューに登録できるようになったため、私見が(新しい)ベストプラクティスにつながる良い質問です。
ラファエル

回答:


9

WP v3.3では、ページの中央でwp_enqueue_scriptを実行することができました。チケット9346

これにより、JSをより優れた粒度で簡単に組み込むことができます(少なくともショートコードを使用する場合)。ここで、jqueryは、ショートコードが実行されたときにのみ含まれます。

function get_slideshow() {
  // Do some stuff...

  // Load up scripts right from within our shortcode function (requires WP 3.3+)
  wp_enqueue_script( 'jquery', array(), null, true  ); 

  return;
}
add_shortcode( 'cool_slideshow', 'get_slideshow' );

1
これが、その方法です。
ラファエル

1
すばらしい。ページの中央でwp_enqueue_scriptを実行できるようになったことに気付いていませんでした。必要なときにのみスクリプト/ CSSをロードするはるかにクリーンな方法!
リックカラン

2

管理UI変数を確認する

1つのメニュー項目は特別な場合ですadd_WHATEVER_(submenu)page()。API を使用して登録されるコメントです。

// All need to be stated as beeing global
global $pagenow, $typenow, $hook_suffix, $parent_file, $submenu_file, $post_type_object;
if ( 'THE-OUTPUT.php' === $WHATEVER_YOU_CHOOSE_TO_CHECK )
    // do stuff

これらは非定数であり、wpコアにハードコーディングされています。すべてのページにすべてが設定されているわけではないことに注意してください。

ページ固有の管理UIフックにフックする

そして、あなたが見てとることができていること、また、特別、ページ固有のフックそこにいるadmin-footer.phpadmin-header.php

// Examples:
// Header
"admin_head-$hook_suffix"
"admin_print_styles-$hook_suffix"
"admin_print_scripts-$hook_suffix"
// Footer
"admin_footer-$hook_suffix"

現実世界の例:投稿画面

// Examples how the result looks like
admin_print_styles-post.php
admin_print_styles-post-new.php

次に$hook_suffix、アクションをフックしているときにスクリプトをキューに登録するためにチェックできるものもあります。

do_action( 'admin_enqueue_scripts', $hook_suffix );

更新

このデータ/情報への簡単な(1クリック)アクセスを得るために、GitHubで利用可能な「(WCM)Current Admin Info」という名前の、無料で利用可能な開発者フレンドリーなプラグインを構築しました。プラグインは近い将来、公式のwp.orgリポジトリでも見つけることができます

スクリーンショット

このプラグインで得られるもののプレビューを表示するには:

画面

フック

グローバル


0

(header.php内の)行に沿って何かを行うことができます:

<?php
        if ( have_posts() && ( is_page() || is_single() ) ) {
            $content = get_the_content(the_post());
            if ( stripos( $content , '[your-shortcode') ) { function_for_scripts(); } 
        }   
?>

現在の読み込みがページか投稿かを確認し、コンテンツを取得してショートコードを検索します。それを見つけると、関数を実行します。


メッセージありがとうございます。私はあなたのソリューションを使用しようとしましたが、残念ながら、それを機能させることができませんでした。
ラスミディ

ヘッダーに追加されましたか?
ノエルトク

1
もう見ましたget_shortcode_regex()か?
カイザー14

0

最も簡単な方法は、ショートコードをチェックすることです。

function your_scripts()
{ 
    global $post;
    wp_register_script('your-script',$the_path_to_your_script,'0.1',true);
    if ( strstr( $post->post_content, '[your-shortcode' ) ) 
    {
        wp_enqueue_script('your-script');
    }
}
add_action( 'wp_enqueue_scripts', 'your_scripts');

1
そのget_shortcode_regex()ためにあります。
カイザー14

0

@kaiser get_shortcode_regex()はこのスレッドで何度か指摘しましたが、使用方法の例を挙げようと思いました。コードは、get_shortcode_regex()WordPressコードリファレンスページからほとんど取られています。

function enqueue_script_if_shortcode_is_detected() {
    global $post;

    wp_register_script( 'your-script', $the_path_to_your_script, '1.0', true );

    $pattern = get_shortcode_regex();

    if (   preg_match_all( '/'. $pattern .'/s', $post->post_content, $matches )
        && array_key_exists( 2, $matches )
        && in_array( 'your-shortcode', $matches[2] )
    ) {
        wp_enqueue_script('your-script');
    }
}
add_action( 'wp_enqueue_scripts', 'enqueue_script_if_shortcode_is_detected' );

-3

私はこの解決策を見つけました:

add_action( 'wp_print_scripts', 'my_deregister_javascript', 100 );

function my_deregister_javascript() {
    wp_deregister_script( 'my_scripts_handle' );
}

3
しかし、あなたのソリューションはすべてのページからスクリプトを削除します
Mamaduka
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.