SyntaxHighlighter Evolvedをsingle テンプレートだけに表示する

はじめに

WordPressを使って、ソースコードを掲載するブログを運営するときに、ソースコードを際立たせてくれるのが「SyntaxHighlighter Evolved」プラグインです。

 

なぜTopページにも表示される?

WordPressプラグインのあるある話ですが、機能を使ってないページにもCSSやJSが読み込まれてしまう現象です。

まあプラグイン側からすると、どこで使うか分からないし、全部読み出しとけーとの考えでしょう。

しかし、Google先生はこれを良しとしません。
使って無いのに呼び出してるぞ、と指摘してきます。

 

指定のページだけに呼びだすようにする

functions.phpに以下の記述をすることで、Singleテンプレート(記事ページ)もしくはpageテンプレート(固定ページ)だけSyntaxHighlighter Evolvedの関係ファイルを表示させることが可能です。

 

if(!is_admin())
{
  function remove_syntaxhighlighter(){
    global $wp_filter;

    if(
      is_single()
      || is_page()
      || !isset($wp_filter['wp_footer'][15])
    )
    return ;

    $hook15 = array();

    foreach ($wp_filter['wp_footer'][15] AS $key => $obj){
      if(!preg_match('/maybe_output_scripts/', $key)) {
        $hook15[] = $obj;
      }
    }

    unset($wp_filter['wp_footer'][15]);

    $wp_filter['wp_footer'][15] =$hook15;
  }
  add_action( 'wp_footer', 'remove_syntaxhighlighter', 1);
}


SyntaxHighlighter Evolved
はページをリロードする毎に、action名を変更してしまうので、上記のソースのようにフックに設定されているaction名を正規表現でフィルタしてやる必要があります。
あと理由は分からないのですが、maybe_output_scriptsだけをunsetで削除することができないので、仕方なくフックのpriorty:15を全て削除して、再設定し直します。

もし特定のページもしくはCusto post typeで呼び出したい場合は、if文をカスタマイズすることで設定が可能です。

この設定で、Google先生もニッコリしてくれると思います。

今日はこの辺でー
 

  • この記事を書いた人

カバノキ

印刷会社のWEB部隊に所属してます。 WEB制作に携わってから、もう時期10年になります。 普段の業務では、PHPをメインにサーバーサイドの言語を扱っています。 最近のお気に入りはJavascriptです。 Vue.jsを狂喜乱舞しながら、社内に布教中です。

-WordPress
-