SimpleCodeプラグインの代用品を作ってみた

WordPressでよくつかわれているプラグインにSimpleCodeというものがあります。
これは記事にPHPやHTMLなどのソースを入れたいときに記号などがHTMLタグとして判別されないよう、文字参照に変換してくれるもので、非常に便利なのですが、一度記事の編集画面を抜けないと利用できないとか、日本語が文字化けしたりとかで、ちょっと使いにくい点もあり、もしかしたらこれは独立したアプリのほうが使いやすいのではないかと思い、同様な動作をするHTAアプリケーションを作ってみました。HTAなのでWindowsでしか動作しませんが。

以下のスクリプトをコピーして、ファイル名を「EncCode.hta」で保存するか、アーカイブをダウンロードして解凍ください。ファイルをダブルクリックすれば実行されます。
EncCode画面
使用法に関しては別に説明するまでもないと思いますが、ソースコード欄にソースを入力して「変換」ボタンを押せば、下のエンコード欄に変換されたコードが表示されます。これを記事編集の画面をコードのモードにてペーストしてください。なお再編集するとWordPressの性質上文字化けしてしまう可能性があります。その際は再ペーストしてください。
「変換」以外のボタンは、
ClipBoard取込=クリップボードから取り込んで変換
ClipBoard自動=クリップボードから取り込んで変換してクリップボードにコピー
となっています。クリップボードを操作するために裏でIEを呼び出しますので、環境によってはレスポンスが悪いかもしれません。
また、変換するコード内に空行がある場合、WordPressはそこでコードが終わりと判別してしまいますので、コード内に空行が入らないように注意して下さい。

※2008/4/30 WordPress2.5.1でのダブルクォーテーション、シングルクォーテーションの文字化けに対する修正を行いました。以前のものをご利用の方は新しいバージョンに差し替えてご利用ください。

<HTA:APPLICATION SCROLL="no">
<html>
  <head>
    <title>EncCode</title>
  </head>
<body>
<h2>EncCode</h2>
<form id="Form1">
  <p>ソースコード:<br>
  <textarea id="TextBox1" rows="10" cols="40"></textarea></p>
  <p>エンコードHTML:<br>
  <textarea id="TextBox2" rows="10" cols="40"></textarea></p>
  <p><input type="button" id="CommandButton1" value="変換"> <input type="button" id="CommandButton2" value="ClipBoard取込"> <input type="button" id="CommandButton3" value="ClipBoard自動"></p>
</form>
'
<script language="VBScript">
Option Explicit
Sub Window_onLoad
  Call Window.ResizeTo(340,500)
  Form1.TextBox1.focus()
End Sub
'
Sub CommandButton1_onClick
  Call Encode()
End Sub
'
Sub CommandButton2_onClick
  Form1.TextBox1.value = GetClipBoard()
  Call Encode()
End Sub
'
Sub CommandButton3_onClick
  Form1.TextBox1.value = GetClipBoard()
  Call Encode()
  SetClipBoard(Form1.TextBox2.value)
End Sub
'
Sub Encode()
  Dim sourceCode
  sourceCode=Form1.TextBox1.value
  sourceCode=HTMLEncode(sourceCode)
  sourceCode="<code>" + sourceCode + "</code>"
  Form1.TextBox2.value= sourceCode
  Form1.TextBox2.select()
End Sub
'
Function HTMLEncode(byVal inString)
  inString = Replace(inString, "&", "&amp;")
  inString = Replace(inString, "<", "&lt;")
  inString = Replace(inString, ">", "&gt;")
  inString = Replace(inString, """", "&#34;")
  inString = Replace(inString, "¥", "&yen;")
  inString = Replace(inString, "'", "&#39;")
  inString = Replace(inString, "  ", "&#160;&#160;")
  inString = Replace(inString, vbTab, "&#160;&#160;")
'  以下はWordPress以外の場合に使い分け
'  inString = Replace(inString, vbCr, "<br>" + vbCr)
'  inString = Replace(inString, vbTab, "<pre>" + vbTab + "</pre>")
'  inString = Replace(inString, "|", "&brvbar;")
  HTMLEncode = inString
End Function
'
Function GetClipBoard()
  Dim objIE
  Set objIE = CreateObject("InternetExplorer.Application")
  objIE.Navigate("about:blank")
  GetClipBoard = objIE.document.parentwindow.clipboardData.GetData("text")
  objIE.Quit
End Function
'
Sub SetClipBoard(byVal inString)
  Dim objIE
  Set objIE = CreateObject("InternetExplorer.Application")
  objIE.Navigate("about:blank")
  objIE.Document.ParentWindow.ClipboardData.SetData "Text", inString
  objIE.Quit
End Sub
</script>
</body>
</html>

アーカイブ:enccode02.lzh


WordPress ME2.2.3から日本語版2.3.3へ

MEを導入していたため、公開直後にいきなりアップグレードの必要に迫られてしまいました当ブログでしたが、こちらの記事のおかげであっさりとアップグレードすることができました。感謝。

wordpress 2.3.2 日本語版へのバージョンアップ

2.3で追加されたタグを表示するようにテーマもちょこっと修正。とはいってもテンプレートの適当な場所に

<?php if (get_the_tags()) :?>
   <?php the_tags('タグ:', ', '); ?>
<?php endif; ?>

な感じでタグを入れるだけなので、たいした作業ではありません。それでもアップグレードよりむしろこちらのほうに時間がかかってしまいました。2.3のタグ対応で、ますます無意味になっているとは思いますが、前の記事でしたようにタグもkeywordsメタに入れてみたりするとこんな感じです
<?php if(is_single()) : while(have_posts()) : the_post();
  foreach(get_the_category() as $category){
    $keyh[$category-&gt;cat_name] = $category-&gt;cat_name;
  }
  if (get_the_tags()){
    foreach(get_the_tags() as $tag){
      $keyh[$tag-&gt;name] = $tag-&gt;name;
    }
  }
  foreach($keyh as $kw){
    $keywords .= $kw . ',';
  }
  $keywords = substr($keywords, 0, strlen($keywords)-1);
  print '<meta name="keywords" content="' . $keywords . '">' . "¥n";
  endwhile; endif;
?>

まあ、keywordsメタにあまりこだわるのも何なので、これぐらいでやめておきます(^^;


タイミング

先の記事のように、ここのブログはWordPress MEを使っていて、昨日ブログ公開を始めたわけですが・・・

WordPress Japan 閉鎖のお知らせ

_| ̄|○

よく調べてみたらMEは前から配布停止予定みたいでした。日本語版に入れ替えねば。


ちょこっとだけSEO対策?

ここのブログはWordPress MEというブログツールを利用しています。これは導入が容易で、HTMLとPHPにさえ慣れていればカスタマイズも簡単なので非常に気に入っています。

とりあえずサイトを立ち上げると気になるのが、いわゆるサーチエンジンへの最適化(SEO対策)です。とはいってもブログの場合はパーマリンクの設定さえしてしまえば、ほとんど気にしなくてもよいみたいですが、一応どのようなものがあるのか調べてみました。

WordPressでのSEO対策用プラグインはいくつかあるようですが、その中でもall-in-one-seo-packというプラグインが人気のようです。これはインストールさえしておけば、デフォルトの状態でも適切なタグを生成してくれるようです。

でも私の場合、ろくに記事も入っていないうちに、ここまでのものをインストールするのもなんだかな~と思いましたので、とりあえずの気休めとしてkeywordsメタを生成するスクリプトを作ってみることにしました。

とはいっても、調べてみる限り、簡単に取得できる情報でkeywordsとして有効利用できそうな情報はカテゴリぐらいしかありません。かなり残念ですが、記事のカテゴリはget_the_category()にて簡単に取得できるようなので、とりあえず今使っているテーマのヘッダテンプレートに以下のようなスクリプトを入れ込んでみました。
<?php if(have_posts()) : while(have_posts()) : the_post();
// 全カテゴリをハッシュに取り込み
foreach(get_the_category() as $category){
  $keyh[$category-&gt;cat_name] = $category-&gt;cat_name;
}
endwhile; endif;
// ハッシュを展開
foreach($keyh as $category){
  $keywords .= $category . ',';
}
// 末尾の','を削除
$keywords = substr($keywords, 0, strlen($keywords)-1);
//出力
print '<meta name="keywords" content="' . $keywords . '">' . "¥n";
?>

いったんハッシュに取り込んでから展開しているのは同じキーワードが重複してサーチエンジンから嫌われるのを防ぐためです。重複の回避策には他にもっといい方法がありそうな気もしますが、私はいつもこの方法を使っています。

これでとりあえずヘッダーにKeyboardsメタとして記事の全カテゴリが入るようになりました。しかし、考えてみると、記事の数によっては負荷が大きくなりそうな気もしたので、シングルページだけでいいや!と以下のように書き換えてしまいました。
これなら負荷はほとんどないはずです。

<?php if(is_single()) : while(have_posts()) : the_post();
print ‘<meta name="keywords" content="’;
foreach(get_the_category() as $category){
$keywords .= $category->cat_name . ',';
}
$keywords = substr($keywords, 0, strlen($keywords)-1);
print $keywords . '">' . "¥n";
endwhile; endif;
?>

これで気休めSEO対策が一応終わりました。でも最近はkeywordsメタの効果はあまりない(Googleでは無視されてるとか)ようですので、何も期待できません(^^;

なんだかんだとやって結局ほとんど意味がなかったり。のっけからこんなことで今後どうなるのでしょうか。


    サイト内検索

    プロフィール

  • 顔絵
  • kotani(こたに)

    30台後半になって突然脱サラ。フリーのスクリプト系プログラマーとして独立を目論む謎のおやぢ。東京都在住。趣味は古本屋巡り、文具いぢり、機械いぢり、B級グルメ探索等々多岐にわたる。PCを使う作業に関しては何でもかんでも自動化したがる自動化オタク。