WordPressを使用する際、私が行っている設定などを紹介しています。私の環境(一人で管理/自作テーマ使用/メール投稿・ユーザー登録・コメント・トラックバック・Hello Dolly・Akismet・メディアアップロード機能未使用)を基準に書いていますので、参考にする場合は適宜読み替えてください。
まず、本当にブログを導入する必要があるのかよく考えてください。周りが使っているから、流行っているから何となく――というのであれば利用をお勧めしません。私は2004年頃からWordPressに触れていますが、このツールは本体の管理が面倒です。次々行われるアップグレードについていけず古いバージョン(危険!)を使い続けている管理人を何人も見てきました。エラー(主にデータベース関係の)が出ても対応できずブログごと破棄してしまった管理人も何人も見てきました。
ブラウザからサーバに各種ファイルをアップロードしたり、ページを作成/削除できるツールは安全だと思いますか? 動的生成のブログを使うことはつまり、あなたのサイトに弱点を増やすことであることも意識してください。WordPressはセキュリティ上のトラブルも多いです。何か問題が起こった時困らないようまめにデータベースのバックアップを取る必要がありますし、新しいバージョンが出た時は必ずアップグレードしなければいけません。面倒臭がりな人はWordPressに不向きです。
ブログもウェブサイトの一種です。ブログだからといって手書きサイトと比べて特別楽に運営できるわけではありません。サイト制作の基礎であるHTMLとCSSの知識は必須です。サーバにブログツールをインストールするのですからWordPress本体を管理する知識と技術も必要です。当然サイト運営上生じた問題にも対応していかなければなりません。
と言っても、WordPressに興味を持った時が使い始めるチャンスなので、気になる方は触ってみるといいでしょう。ただ、いきなり公開するのはやめておいた方がいいです。WordPressの扱いに慣れて、使い続ける覚悟(と言うと大げさですが)ができてから公開するといいと思います。いきなり勉強するのも疲れるでしょうから、少しずつ学んでください。
主にセキュリティの強化です。と言っても劇的に変わるわけではなく、気休め程度です。
デフォルトではwp-config.phpに$table_prefix = 'wp_';
という設定項目がありますが、そのままだとセキュリティ的によくないのでwp
の部分を変更します。パスワードのようなランダムな文字列がいいです。
他にデータベースを使うツールを設置している場合はデータベースも分けた方がいいです。
ブログをインストールしたからといってそれに備わっている全ての機能を使うとは限りません。なので、未使用の機能に関わるフォルダ及びファイルはサーバーにアップロードしないようにしています。使わないファイルを上げてセキュリティホールを作る必要はありません。私が削除しているファイルとフォルダは以下の通りです。
テーマによっては管理画面にリンクを張っているものがありますが、管理人以外が管理画面にアクセスできる状況は好ましくないので削除しましょう。管理画面へはブックマークからアクセスすることをお勧めします。
インストーラを使うとwp-config.phpのパーミッションと所有者が変更されるのできちんと元に戻しておきましょう。変更の仕方が分からない場合は、一度wp-config.phpをローカルにダウンロードして、サーバ上のwp-config.phpを削除し、ローカルのwp-config.phpをサーバ上にアップロードすれば大丈夫です。私はパーミッションを404にしています。
変更を怠った場合、WordPress のインストーラによって wp-config.php を生成した場合、ウェブサーバーによる書き込み権限が残っています。したがって、悪意あるプラグイン/テーマを実行すると、wp-config.php に悪いコードを入れられる可能性はあります。
(引用元)とのことです。
セキュリティキーツール 1.1でランダムなキーが生成されるのでコピー&ペーストします。
直接アクセスする必要のないフォルダ・ファイルに対してアクセス制限します。
wp-content/uploads
になっているので、場合によってはファイルの閲覧に支障が出るのでご注意ください。
Order allow,deny
Deny from all
<FilesMatch "\.(css|jpeg|jpg|png|gif|js)$">
Allow from all
</FilesMatch>
<FilesMatch "^wp-config\.php$">
deny from all
</FilesMatch>
ServerSignature Off
php_flag display_errors Off
php_flag display_startup_errors Off
/%year%/%monthnum%/%day%/%postname%
ディレクトリを削ると月別、年別のアーカイブになるところが好きなのでこういうURL設計です。post_idの場合、記事やページを削除すると欠番になる、WP本体からデータをインポート・エクスポートすると投稿IDがずれる、ナビゲーションリンクやアーカイブページで不都合が出るなど色々問題があるのでpostnameを使った方がいいです。自作する際参考にさせていただいたもの。
テーマに加えている変更など。何でもプラグインに頼るのはよくないのでテーマで解決できることはこちらを使った方がいいです。
WordPress 2.8にしてからhead要素内に無駄な要素が増えてウザい件について(der Gegenwart)参照。例えば以下のコードをfunctions.php
に書き加えると、ヘッダに自動挿入されるバージョン情報・wlwmanifest.xml・rsd へのリンクが削除されます。
remove_action('wp_head', 'wp_generator');
remove_action('wp_head', 'wlwmanifest_link');
remove_action('wp_head', 'rsd_link');
勝手に挿入されるJavascriptやCSSが嫌なので<?php wp_head(); ?>
自体の使用を止め、必要なものだけ個別に呼び出すようにしました。私のように<?php wp_head(); ?>
を取り除く場合はプラグインが正常に動かなくなるので注意してください。
テンプレートタグ/query posts(WordPress Codex 日本語版)参考。1ページに表示する投稿数はデフォルトだと一括指定されてしまうので、ページ種類別に表示件数を変えます。例えばメインページに5件表示させたい場合はindex.php
のループの前に、
<?php query_posts(array('posts_per_page'=>5, 'paged'=>$paged)); ?>
WP-Pagenaviを使わずにページナビゲーションを表示(der Gegenwart)参照。プラグインを使わず実現できるのならその方がいいと思うので。
以下のコードをfunctions.php
に貼りつけてページナビゲーションを表示させたいところに<?php page_navigation(); ?>
を挿入します。
function page_navigation() {
global $wp_rewrite;
global $wp_query;
global $paged;
$paginate_base = get_pagenum_link(1);
if(($wp_query->max_num_pages) > 1):
if (strpos($paginate_base, '?') || ! $wp_rewrite->using_permalinks()) {
$paginate_format = '';
$paginate_base = add_query_arg('paged', '%#%');
} else {
$paginate_format = (substr($paginate_base, -1 ,1) == '/' ? '' : '/') .
user_trailingslashit('page/%#%/', 'paged');;
$paginate_base .= '%_%';
}
$result = paginate_links( array(
'base' => $paginate_base,
'format' => $paginate_format,
'total' => $wp_query->max_num_pages,
'mid_size' => 3,
'current' => ($paged ? $paged : 1),
));
echo '<p class="local-navigation">'."\n".$result."</p>\n";
endif;
}
テンプレートタグ/previous post link(WordPress Codex 日本語版)参照。single.php
で使用。デフォルトでは時系列順の前後リンクになるところを、同一カテゴリー内で移動できるようにします。複数カテゴリーを選択した場合はカテゴリーIDが小さいものが優先されます。多分。
<p class="local-navigation">
<?php previous_post_link('« %link', '%title', 'true') ?>
<?php the_category(',') ?>
<?php next_post_link('%link »', '%title', 'true') ?>
</p>
http://www.rusica.net/meta_link.txtより。
以下のコードをfunctions.php
に書き加え、header.php
に<?php meta_link(); ?>
を挿入します。
function meta_link(){
if(is_single()) {
global $wpdb, $wp_query;
$post = $wp_query->post;
$prev_post = get_previous_post('true','');
if($prev_post) {
$prev_title = strip_tags(str_replace('"', '', $prev_post->post_title));
echo '<link rel="prev" href="' . get_permalink($prev_post->ID) . '" title="' . $prev_title. '" />' . "n";
}
$next_post = get_next_post('true','');
if($next_post) {
$next_title = strip_tags(str_replace('"', '', $next_post->post_title));
echo '<link rel="next" href="' . get_permalink($next_post->ID) . '" title="' . $next_title. '" />' . "n";
}
}
}
こんなことをしなくても、head 内に前後の投稿への関連リンク要素(link rel="prev"/"next")を出力する新規関数 (get_adjacent_post_rel_link()/enおよびadjacent_post_rel_link()/en)を追加
(引用元)があるらしいのですが、よく分かりません。
使っていませんが、一応。
<p class="topicPath"><a href="<?php bloginfo('home'); ?>"><?php bloginfo('name'); ?> index</a> > <?php the_category(' > ', 'multiple'); ?> > <strong><?php the_title(); ?></strong></p>
他にはWordpressでプラグインなしの一番簡単なパンくず表示方法(Re:very)というやり方もあります。
WP clean excerptというプラグインを作りました。カスタマイズの項目で各種自動整形無効化のやり方も載せています。
Excluding Posts from Your Wordpress Feed ?(Jangro.com)より。例えばカテゴリーIDが「5」のものを除外したい場合は以下の通り。
function exclude_rss($query)
{
if ($query->is_feed)
{
$query->set('cat','-5');
}
return $query;
}
add_filter('pre_get_posts','exclude_rss');
複数カテゴリーを指定したい場合は$query->set('cat','-5,-10,-15');
とします。
wp-congig.phpに以下のコードを追加すれば自動下書き・自動保存を停止できます。
// ★☆★☆★ リビジョン停止 ★☆★☆★
define('WP_POST_REVISIONS', false);
// ★☆★☆★ 自動保存停止 ★☆★☆★
function disable_autosave()
{
wp_deregister_script('autosave');
}
また、WordPress 3.4.2の時点でログインすると勝手にpost idを消費します(クイック投稿が原因。非表示にしてもやはりpost idを消費する…)。wp-congig.phpのrequire_once(ABSPATH . 'wp-settings.php');
の後に以下のコードを追加すると、「クイック投稿」そのものを無効にできます。
// ★☆★☆★ クイック設定を無効化 ★☆★☆★
function disable_quick_press()
{
remove_meta_box('dashboard_quick_press', 'dashboard', 'side');
}
add_action('wp_dashboard_setup', 'disable_quick_press');
入れるものは必要最小限にしましょう。
\n<!-- Dynamic page generated in $duration seconds. -->\n
と\n<!-- Page not cached by WP Super Cache. Could not get mutex lock. -->\n
と<!-- Cached page generated by WP-Super-Cache on " . gmdate('Y-m-d H:i:s', (time() + ( $wp_cache_gmt_offset * 3600))) . " -->\n
の部分を削除すれば表示されなくなります。<?php the_content(); ?>
を<?php the_hn_converted_content(1); ?>
というふうに書き換えます。正の引数であれば見出しレベルに足され、不の引数であれば引かれます。定期的にバックアップを取ることをお勧めします。特に新しいプラグインをインストールする時やWordPress本体のアップグレードを行う時は必ずバックアップを取るようにしましょう。詳しくはデータベースのバックアップ - WordPress Codex 日本語版(en)を参考にしてください。
WordPress のアップグレード(WordPress Codex 日本語版)を参考にしつつ、私のアップグレード手順を書きます。自動アップグレード機能は使っていません。メンテナンスの時は503エラーを返すのがいいらしいのですが、面倒なのでしていません。
Webにも有益な情報はたくさんありますが、やはり書籍が手許にあると心強いです。 ここでは私が参考にした書籍・webページを紹介しています。