プラグインとショートコードについて学んでいます。私が自分のプラグインを有効にすると、そのコードが私のすべてのページにロードされることに気付きました。 (私はコンテンツ対管理ページを意味するものではありません)。一部のコンテンツページでは特定のショートコードを使用し、他のコンテンツページでは使用しません。ただし、いずれにせよ、プラグインのコードが読み込まれます。ショートコードが使用されているページにのみプラグインが含まれるようにするにはどうすればよいですか?
より詳しく:
ライトボックスを作るプラグインがあるとしましょう。プラグインを起動します。私の「かっこいい画像」ページでは、ライトボックスを作成するためにショートコードを使用しています。ライトボックスのショートコードを使用していない[バージョン情報]ページで[ソースの表示]を確認すると、ライトボックスプラグインのコードが読み込まれています。自分のプラグインを書くと自分のページが速くロードされるので、そのコードは必要な場所にのみロードされます。これは可能ですか?さもなければ、私は不必要にページにロードされたたくさんのプラグインのためのコードを持つでしょう。何か案は?
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つのメニュー項目は特別な場合です。コメントは、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コアにハードコードされています。すべてのページにすべてが設定されているわけではないことに注意してください。
それから、admin-footer.php
とadmin-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クリックで)アクセスするために、 "(WCM)Current Admin Info" という名前の自由に利用できる開発者向けのプラグインを作成しました。 GitHub にあります。プラグインは近い将来 公式のwp.orgリポジトリ にもあります。
このプラグインで何が得られるのかをプレビューするには:
(header.phpの)行に沿って何かをすることができます:
<?php
if ( have_posts() && ( is_page() || is_single() ) ) {
$content = get_the_content(the_post());
if ( stripos( $content , '[your-shortcode') ) { function_for_scripts(); }
}
?>
現在の読み込みがページか投稿かを確認してから、コンテンツを取得して自分のショートコードを検索します。それが見つかると、それはあなたの機能を実行します。
最も簡単な方法はショートコードをチェックすることです。
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');
@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' );