[WordPress] ページリストから特定のページを外す方法

以前出したPHP5でいろんなウェブサービスをあやつる人のための解説本「PHP×WebサービスAPIコネクションズ」のためのサポートサイトを運営しているのですが、読者の方から誤植などを教えていただくためのフォームが最近スパムロボットに捕捉されたようで、怪しいURLの満載されたメールがフォーム経由で届くようになってしまいました。

最近は読者の方からの連絡もほとんど無くなってきたのに、毎日のように律儀なスクリプトがスパムメールを送ってくれるわけです。かといって閉鎖したら本当に用がある人が連絡できない。(まあ、探せば僕のメールアドレスはわかると思いますけど)

しょうがないので自作のフォームにロボット除けのCAPTCHAを組み込もうかなと思ったのですが、良く考えたらそういうフォームはWordPressのプラグインContact Form7で他にも作って、アジアジン等で使ってるわけです。WordPressの中の仕組みだけれど、それを指して使えばそれでもいいかな、と思いました。

ということで、この個人ブログのWordPressを使って、CAPTCHAつき「作者に連絡フォーム」を作ることにしました。

と、ここまでは一瞬です。本当に簡単にフォームが作れます。このフォームをどこに置くかですが、ブログ本編とは関係ないので、WordPressの「ページ」として作成します。

問題は、ページで作ってしまうと、通常のテーマではページの一覧リストに表示されてしまうこと。このページの上のほうにある「Home 仕事依頼 自分用リンク 自己紹介」というやつですね。ブログとは無関係だからここには載せたくない、かといってページを「非公開」で作ると、こんどはページのタイトルに「非公開」とつけられてしまいます。

そこで、テーマファイルにちょっと手を入れることになります。今使っているテーマファイルでは、ヘッダの中にこのページ一覧があるので、[デザイン]-[テーマエディタ]-[ヘッダー]でheader.phpを開きます。

ページリストを作っているのはこの関数。

wp_list_pages('depth=1&title_li=');

こいつのパラメータに、「この番号のページは除外してね」と指定できます。表示させたくないページIDを管理画面から持ってきて、

wp_list_pages('depth=1&title_li=&exclude=581');

などすると、一覧から今回作ったコンタクトフォームのページが外されるようになりました。この関数には他にもいろいろパラメータがあるみたいで、プログラムレスでかなりのカスタマイズができるんだなあ、とあらためて関心。