知人のサイトをWordPressで作成しました

知人から依頼を受けて、WordPressでサイトを作成しました。WordPressはインストール済み、デザインもすでに作ってあるとのことなので、行なうことは主にCMSとしての組み込み作業とレスポンシブ対応。継続的にメンテしてほしいという話でもないので手離れよくまとめる必要があります。寿司職人に中華料理を作らせるみたいな畑違いの依頼ですが、どうなるか。

ログイン画面。これが気に入らないと始まらない。

ダッシュボード。MODXの管理画面のようなデザインにカスタマイズしました。

フォントも見やすくしてます。WordPressの管理画面は最新のv4.7でもMSゴシックなのでちょっと・・・

投稿画面。シンプルに構成しました。

技術資料を管理画面内に設置。私以外の技術者さんがサイトをスムーズに管理できるように、要点をまとめました。

<!DOCTYPE html>
<html>
<head>
  <meta charset="UTF-8">
  <title>[*pagetitle*] - [(site_name)]</title>
  <meta name="description" content="[*description*]">
  <link href="[(theme_url)]style.css" rel="stylesheet">
  [(wp_head)]
</head>
<body class="[+body_class+]">

テンプレートはMODXみたいな感じ。PHPコードを全く使わず、HTMLだけで構成してます。WordPressが苦手なデザイナーさんでも、これならなんとなく管理できると思います。テンプレートは全て管理画面内で編集できます。

http://forum.modx.jp/viewtopic.php?f=34&t=1695
自作のプラグイン。これを使うと、MODXみたいなテンプレートワークができます。上記フォーラムで配布しているのは参考出品程度の機能しかありませんが、時間があれば改善していきたいです。

<?php
/**
 * The template for displaying all pages.
 */

if(!defined('WPINC')) exit('error');

$result = '';
if(is_front_page())     $result = $ex->parse('tpl/page_top.tpl');
elseif(is_page())       $result = $ex->parse('tpl/page_other.tpl');
elseif(is_attachment()) $result = $ex->parse('tpl/page_pict.tpl');
elseif(is_404())        $result = $ex->parse('tpl/page_404.tpl');
else                    wp_safe_redirect(get_option('siteurl'));

if(is_404()) header('HTTP/1.0 404 Not Found');
if($result) echo $result;
return;
?>

テーマファイルの中身はたったこれだけ。PHPファイルがごちゃごちゃ混じってる感じがないので、管理しやすいはず。WordPressではあまり使われないindex.phpをエントリーポイントとして使っています。single.php や 404.php などの、他のテンプレートファイルは全く使いません。

ヘッダやフッタなどのパーツはWordPressでテーマを作る際はほぼ必須だと思いますが、細かくパーツ分けすると分かりにくくなるので、それも使ってません。でもちゃんとwp_head()などは処理してます。

URLとテンプレートファイルの紐付けをテーマが行なって、テンプレートの中身の展開はプラグインが行なうという役割分担です。

テーマの構成ファイルが少なくて、コードの行数も少なく、プラグイン数も最小限。このサイトは基本的に一年に一度しか更新しないのですが、極端ですが、一年ぶりにログインしても迷わないようにしました。

「これだけで動くの?」と思うくらいスカスカかも。こういう特殊な作り方をすると「設計した本人しか理解できない」ということになりがちなんですが、そうならないように構成できたと思います。

他、セキュリティ面にいろいろ配慮してます。Acecpt-Languageヘッダの有無をチェックして、ログイン画面はボットに見せないようにとか。また、WordPressはmod_rewriteがコア領域にも及ぶのですが、手当たり次第に探りを入れてくるボットがいちいちインスタンスを起動して、それ自体の負荷でDoS攻撃が成立してしまうことがあるくらいなので、そのへんの対策もやっておきました。

RewriteEngine On
RewriteCond %{HTTP:Accept-Language} !^ja [NC]
RewriteRule ^(wp-admin|wp-includes)/ - [R=404,L]
RewriteRule ^(wp-admin|wp-includes|wp-content)/.*$ - [L]

たったこれだけ。これがあるとないとでは大違い。