先月末頃から、(主に海外からの)プログラム化されたスパム的トラックバックの被害に遭い始めました。既に運営方針でも掲げているように、いくらスパマーさんが頑張っても、天下のAkismetプラグインがこれらを蹴散らしてくれているので、実害は表面的にはありません。しかし、細かいところでは色々と問題があります。例えばWordPressはコメント(感想)もトラックバック(言及通知)も同じように採番していますが、それ故に、「最近のコメント」で掲示しているコメントIDが恐ろしいほどに飛び飛びになってしまいました(#8の次は#158!)。
流石にこのまま日に数件増えるのはぞっとしないので、ばっさりと.htaccess側でスパムを遮断するようにしました。島国日本鎖国根性で生活するなら、日本のIPアドレス範囲をざっくりと決めて、それ以外のアクセスを遮断するのでしょうが、国際交流を謳うエスペラントに関するウェブサイトを運営しておいてそれはあんまりなので、明らかにスパムと思われるユーザエージェントによるPOSTメソッドによるアクセスを拒否した次第です。
以降、嘘のようにWordPress側まで到達するPOSTが無くなり、ログで見ても面白いようにスパマーがHTTP 403(forbidden)に引っ掛かるようになりました。かくして、私の心の平安は保たれたという訳です。
ここまでは単純にめでたしめでたしなのですが、万が一想定の範囲を超えてアクセスを遮断しているといけませんので、上記の制限を行った旨を公開しようと思いました。GETメソッドは遮断していないので、このウェブログの記事として書けば問題ありません。こうして、Mi refuzis partan aliron (アクセス一部制限のご連絡)という記事を公開しました。
……しかし、ここでふと気が付きました。トラックバック(英: TrackBack)はエスペラントでは何というのでしょうか?
エスペラント単語のフォーチュン・クッキー機能の公開以来、随分と放置していたのですが、この度この開発日誌からも使えるようにしました。なお、ついでにリンク先のURIの字上符付き文字も正書法にしました。GUIなユーザエージェント(つまりはIE等)では左肩に表示される「Ĉu vi scias?」というものがその成果です。
最初からやっておけば良かったのですが、XREAに於いてWordPressから外部プログラム(この場合、フォーチュン・クッキーのスクリプト)を呼び出す方法が当初不明だったため、今まで放置していたという次第です。
WordPressはPHPで書かれており、かつ、XREAに於いてPHPはSafe Mode(セーフモード)で稼働しているので、単純に適当なテーマファイル、例えばslidebar.phpあたりにecho `~`;やらexec('~');やらecho popen '~';やらと書いただけでは、外部プログラムを稼働することは出来ません。かといって、わざわざsidebar.phpの中でロジックを最初から組むのはぞっとしません。何せ、ランダム表示の元ネタである見出し語一覧は、Perlのデータ構造としてStorable::nstoreしたものを解凍しているだけなので、PHPから単純にこのバイナリデータを読むこと能わず、PHP用の見出し語一覧をまたこしらえる必要があります。これはいかにもいただけません。
とはいえPerlは知っていてもPHPは知らなかったため難儀していたのですが、結局やることは単純で、virtual('~');をするだけでした。この場合、呼ぶ先は'/virtual/USER/public_html/DIR/SCR.pl'と絶対パスで記述するのではなく、'DIR/SCR.pl'と記述する必要があります。この辺は、通常のHTML文書にSSIを埋め込む際の記述<!--#include virtual="DIR/SCR.pl"-->と変わりませんね。
これにより、部品はそのままで、開発日誌からもフォーチュン・クッキーを表示することが出来ました。問題は、相変わらずそうやって設置した本人が「うっ、なんだこの語は?!」とプログラムにいじめられることでしょうか……。
WordPressでは、長い記事(エントリまたはポストとも呼称される)を<!--nextpage-->タグにて複数ページに分割する機能があります(カテゴリ毎に記事が沢山生じた場合のページ分割ではありません)。その場合、single.php等のテーマファイルに記述する、link_pages()またはwp_link_pages()というWordPressタグにて、それらのページへのリンクを設けることが出来ます。このWordPressタグでは、以下の表示方法を選択出来ます。
ところが、簡便さを優先したと思われるため、上記は排他的にしか選べません。
ウェブサイトデザインをあまり語れたものではありませんが、こういう「ページ物」のお作法としては、「前へ / 1ページ目 / 2ページ目 / … / nページ目 / 次へ」という書式が一般的です。例えば、Googleの検索結果が複数ページにわたる場合のページリンクは、上記の通りとなっています。このように、前後リンクとページ数リンクを両方表示する、すなわち共存させる方法はないものでしょうか。
結局、テーマファイル側で手間を掛ける必要があったので、調査結果を以下の通りご案内します。
WordPressの添付ファイル専用ページで、大きな画像もオリジナルサイズで表示する方法について調べました。WordPressのコアに手を入れる必要があるようですので、ご紹介します。追記あり:2.2.1では、テーマファイルattachment.phpの記述だけでサイズを制御出来ました。
WordPressの「アップロード」機能を使うと、画像等のファイルをブログにアップロード出来ます。縮小サイズの画像(サムネイル)を自動で作成するなど、多機能ではありませんが標準的なところを押さえている機能です。表示方法(サムネイル・フルサイズ・タイトル)とリンク先(ファイル・ページ・なし)を選んで投稿内容に挿入出来ます。
ここで、リンク先を「ページ」とした場合には、attachment.php(なければindex.php)により、アップロードしたファイル専用のページ(以後、「添付ファイル専用ページ」と呼称します)を作成出来、投稿したページ中のサムネイルかフルサイズ画像かタイトルから、当該専用ページにリンクを張ることが出来ます。
しかし、困ったことに、添付ファイル専用ページの画像が意図せずに縮小されてしまうという親切ないしお節介な機能があります。先のエントリではこの仕様に悩まされました。
閲覧者の立場からみると、オリジナルサイズ(元の解像度)の元画像に到達するまでには、以下のような手順を踏む必要があり、とても面倒です。
テーマ側(attachment.phpやindex.php)にてこの仕様を変更できないものかとも考えましたが、どうも駄目そうでした。そこで、この機能自体を殺してしまうことにしました。具体的な方法は、以下の通りです。
WordPressを触り始めたばかりですが、せっかく設定変更を自由に行えるのですから、色々と凝りたいのが人の性というもの。まだテーマ自体作成途上とはいえ、早速末梢的なことに凝ってしまいました。今回の変更対象は、投稿日です。
投稿日を表示するthe_date()をそのまま呼ぶと何とも味気ない表示になりますので、中央揃えした矩形の中に年月日を思い思いに配列することにしました。結果はご覧の通りなのですが、それなりに躓きそうな点があったので、備忘録として書いておきます。
| 月 | 火 | 水 | 木 | 金 | 土 | 日 |
|---|---|---|---|---|---|---|
| « 9 月 | ||||||
| 1 | 2 | |||||
| 3 | 4 | 5 | 6 | 7 | 8 | 9 |
| 10 | 11 | 12 | 13 | 14 | 15 | 16 |
| 17 | 18 | 19 | 20 | 21 | 22 | 23 |
| 24 | 25 | 26 | 27 | 28 | 29 | 30 |