特定のページや投稿で、テンプレート編集なしで、スクリプトをセットアップする

特定のページで、javascriptを実行したい時、スクリプトへのリンク、インラインのスクリプト、CSSの追加の3つがたいていの場合必要になります。

テンプレートを編集したり、固定ページを作成したりしてもいいのですが、手間のかかる割には、柔軟性に欠けるという事があります。

下のスクリプトは、functions.phpにコードを追加するだけで、この3種の作業を行ってしまおうとする試みです。

投稿やページを作成したら、[myscripts] というショートコードを記述するだけで、スクリプトを追加することが出来ます。


<?php
add_action( 'after_setup_theme', 'my_scripts_setup' );

function my_scripts_setup() {
	add_action( 'wp_footer', 'my_add_inline_script', 99 );
	add_action( 'wp_enqueue_scripts', 'my_add_inline_style' );
	add_shortcode( 'myscripts', 'my_add_script_source' );
}

function my_add_inline_style() {

	global $post;

	if ( has_shortcode( $post->post_content, 'myscripts' ) && is_singular() ) {

		$my_css= '/*something inline css*/';
		//twentytwelve-style は テーマにより異なります。
		// link 要素のIDから -css を取り除いたもの
		wp_add_inline_style( 'twentytwelve-style', $my_css );

		// jquery plugin等、依存関係があるときには、配列に handle を入れてください 
		wp_enqueue_script( 'myfancyboxjs', 'http://www.example.com/js/jquery.fancybox.js', array( 'jquery' ), '1.0', true );
	}
}

function my_add_script_source() {
	// 空のショートコードで、スクリプトをロードするかどうかのマーカーにします	

	return;
}

function my_add_inline_script() {

	$scripts= '/* something inline script */';

	if ( wp_script_is( 'myfancyboxjs', 'done' ) ) {

		$html= '<script type="text/javascript">%1$s</script>' . "\n";

		printf( $html, $scripts );
	}
}

?>

11/19 コードを修正しました。


[emulsion_relate_posts]