完成版?プラグイン無しでソースコードを表示 ~ WordPressの無料テーマGushをカスタマイズ。
一昨日から悩んでいた、「プラグイン無しでソースコード表示機能を追加する」ですが、ちょっと妥協したところはありますが完成しました。そんなわけでGushをちょっと改造してみました。ちょいとウロウロっと試行錯誤したり、ちょっと妥協したところもありましたが無事、完成しました。
Gushにコード表示関数とスタイルを組み込む方法
表示サンプルに自分自身のソースコードを使っていたのですが、変換用の文字列が書かれているのでなかなかすんなりと行かず。でも、程よいところで妥協できたかな?と思います。というわけで完成しました。
使用上の注意点としては(全部、半角でお願いします)、
- [code]~[/code]で囲う(複数行可)
- 「<p~」は「<p~」としてください。
- 「</p~」は「</p~」としてください。
「<p~」と「<p/~」についてですが、この文字列があるだけでなぜかWordPressの方で改行してしまうため、そもそも書けない(少なくとも現バージョンで改行の自動挿入を抑制するプラグイン無しでは)文字列じゃないかな?と思います。
実際にGush(V1.1.0)に組み込むには、functions.phpとstyle.cssの2つを修正します。組み込む場所を行番号で示していますが、Gushオリジナルの状態に組み込む前提の行番号です。
functions.php
一番最後に組み込めばいいので、最後の「?>」の手前になるように組み込みます。そんなわけで、行番号で言えば177行目です。
//コード表示用置換
function disp_code( $attr, $content = null ){
$content = clean_pre( $content );
$content = str_replace( '<'.'p', '<'.'p', $content );
$content = str_replace( '<'.'/p', '<'.'/p', $content );
$content = str_replace( '&', '&', $content );
$content = str_replace( '&#038;', '&', $content );
$content = str_replace( '<', '<', $content );
$content = str_replace( '>', '>', $content );
$content = str_replace( '"', '"', $content );
$content = '<pre class="disp_code"><code>'.$content.'</code></pre>';
return $content;
}
add_shortcode( 'code', 'disp_code' );
この処理の弱いところとして、「&lt;p~」という文字列があると変換してしまうのですが、そんなに使うことはないだろうということで、このままとしました。
あと、WordPressによる改行防止のために、ちょっとトリッキーな表記をして改行されないようにしています。
$content = str_replace( '<'.'p', '<'.'p', $content );
$content = str_replace( '<'.'/p', '<'.'/p', $content );
[/code]
PHPでは、「.」で文字列を結合できるのですが、これを使って文字列を表現することで、文字列を切り離しているのです。少々無理感のある小技ですが、試しにやってみたらできちゃったのでヨシとします。
ついでに、というのも変ですが、このソースコード自身、当然、この文字列を変換するために「&lt;p~」を含んでしまい、当然、表示時、変換対象になってしまいます。そこは先と同じ小技で表示時、変換されないようにしています。
<h3>style.cssは滲みもいれて80年代風</h3>
なかなかどこに組み込めばいいのかわからなかったのですが、試行錯誤の末、401行目に組み込みました。コンテンツ表示用のスタイルシートが定義されているところの最後です。
[code]
#contents pre.disp_code {
clear: both;
font-size: 80%;
overflow-x: auto;
background-color: #010;
color: #0f0;
margin-top: -24px;
padding: 0px 8px 18px;
text-shadow: 2px 2px 2px #0A0;
}
フォントサイズは少し小さめのほうがしまりがあるかな?と思い、80%にしています。また、80年代のブラウン管時代(SHARP MZ-2000とか)を懐かしんで、背景は黒で文字は緑色にしてみました。「text-shadow」を指定することで、ブラウン管表示っぽい滲みも表現してみました。
長いテキストは横スクロールも可能
あ、これは、参考にさせていただいたサイトからの情報です(前々記事参照してください)。紹介したソースコードが短くて、横方向にスクロールする表示が無かったので、わざと横に長くしたソースコード表示を紹介します。「overflow-x: auto;」が効いているのですね!
function disp_code( $attr, $content = null ){
$content = clean_pre( $content ); $content = str_replace( '<'.'p', '<'.'p', $content ); $content = str_replace( '<'.'/p', '<'.'/p', $content ); [/code]
今日の一言二言三言
あっさりと スラスラ書いて おりますが
実は何度も 試行錯誤
字足らずですが、WordPress初心者、PHPはわからない、スタイルシートも超初心者が故、「数打ちゃ当たるメソッド」でなんとか実装しました。でも、ちょっとずつ慣れてきたというか、少しは理解できてきたので、次はもっとスマートに行きたいな、と思います。
WordPressをカスタマイズしてプラグイン無しでソースコード表示に挑戦♪
ブログ等でソースコードを表示するのは案外めんどくさいものです。特にHTMLコードの場合、タグがタグとして動作してしまい、ソースコードとして表示できないこともあります。WordPressではプラグインを使ってうまく表示させることができますが、ビギナーなSiSOにとって程よい難易度でおもしろそうなので自力実装挑戦中です。 |
Your Message