WordPressに記事を追加する場合、通常は管理画面を使って投稿しますが、メールを使って簡単・手軽に投稿することもできます。ただし実装方法はいくつかあって、それぞれ一長一短があります。

1.標準機能を使う

事前準備

メール投稿用のメールアドレス(メールアカウント)を作成しておきます。レンタルサーバ上に作成してもよいですし、Gmailを使ってもかまいませんが、このアドレスに送信されたものが記事投稿になるので専用のアドレスを新規作成するのがよいです。

設定

管理画面「設定」->「投稿設定」に「メールでの投稿」という項目があります。ここに事前準備で作成したメールアカウントの情報を入力します。「メール投稿用カテゴリーの初期設定」には、投稿が登録されるカテゴリを指定します。

投稿

設定したメールアドレス宛にメールを送信します。件名が記事タイトル、本文が記事本文となります。添付ファイルの処理はされないので画像を投稿することはできません。

このとき、送信元メールアドレスはWordpressにユーザ情報として登録されているメールアドレスである必要があります。Wordpressは送信元メールアドレスと照合して投稿ユーザの紐付けを行ない、紐付けが出来ない投稿は処理しません。

ただし、Wordpress側の投稿処理は標準では自動で行なわれません。投稿を反映させるためにはwp-mail.phpを手動実行するか、cronなどで自動実行する処理を自分で用意する必要があります。これがなかなか面倒です。

2.Ktai Entryを使う

「Ktai Entry」は標準機能の不備を補ってくれるプラグインです。投稿反映の自動実行、画像添付、独自記法によるカテゴリ指定などに対応しています。

事前準備

上記「標準機能を使う」の事前準備、設定を行ない、プラグイン「Ktai Entry」をインストールします。

設定

管理画面「設定」->「メールで投稿」で設定を行ないます。読み込み間隔、投稿受付メールアドレス(事前準備で作成したメールアドレスを入力する)、画像を添付した場合の配置位置、大きさ、テンプレート、管理者通知の有無などを設定できます。

投稿

標準機能を使った場合と同じく、設定した投稿用メールアドレス宛に、ユーザ情報で登録しているメールアドレスからメールを送信します。管理画面で設定した読み込み間隔に従って投稿が反映されます。

独自記法や高度な使い方についてはKtai Entryの公式ページを参照してください。

3.JetPackを使う

「Jetpack」はwordpress.com(WordpressのASPサービス)で提供されている機能をWordPressでも使えるようにするためのプラグインです。たくさんある機能の中にメール投稿も含まれています。

事前準備

Jetpackの機能を使うにはwordpress.comのアカウントを用意し、紐付け(連携)を行なう必要があります。あらかじめアカウントを用意してからプラグイン「JetPack」をインストールします。

インストールするとwordpress.comとの連携を促すボタンが表示されるので、これをクリックして連携を完了させてください。

設定

管理画面「ユーザー」->「あなたのプロフィール」に「メール投稿」という項目が追加されていますので、ここにある「メール投稿を有効化」ボタンをクリックします。クリックすると投稿用のメールアドレスが生成されます(例:xxxxxxxxxxx@post.wordpress.com)。

投稿

上記の設定で生成されたメールアドレス宛にメールを送信することで、Wordpressに記事が投稿されます。件名が記事タイトル、本文が記事本文となり、本文中にショートコードを記述することでカテゴリ、スラッグ、公開状態などの指定ができます。

このとき、送信元メールアドレスは識別されません。標準機能・Ktai Entryが送信元で投稿ユーザを判別するのに対して、JetPackは送信先メールアドレスをユーザ毎に生成することで投稿ユーザを認識します。そのため、運用次第ですが投稿用メールアドレスは秘密にしておく必要があるでしょう。

画像添付にも対応しており、HTMLメールの場合は文章中に挿入することも可能です。テキストメールの場合は本文の後ろに挿入され、複数枚添付している場合は標準機能の「ギャラリー」として表示されます(ショートコードが自動で付加されます)。

どの方法がよいのか

標準機能だけでは実用に耐えないのでKtai EntryかJetPackの2択になります。機能に大きな差はありませんが、一番大きな違いは投稿ユーザの識別方法だと思います。

Kati Entryは送信元で識別するので、基本的に(複数端末や送信元偽装を考えなければ)1投稿ユーザで投稿できるのは1人だけになります。JetPackは投稿用メールアドレスを知っていれば誰でも投稿することができるので、1投稿ユーザを複数人で運用する場合は便利です。

WordPressの管理画面などで使われている文言は、翻訳ファイル(poファイル)で定義されています。翻訳ファイルを修正するのは面倒ですが、functions.phpを使って、場当たり的ではありますが簡単に変更することもできます。

function my_gettext( $translated, $text, $domain ) {
    $custom_translates = array(
        'default' => array(
            'ニックネーム' => '名まえ',
            'プロフィール情報' => '自己紹介'
        )
    );
    if ( isset( $custom_translates[$domain] ) ) {
        $translated = str_replace( array_keys( $custom_translates[$domain] ), $custom_translates[$domain], $translated );
    }
    return $translated;
}
add_filter( 'gettext', 'my_gettext', 10, 3 );

詳しくはこちらをご参照ください。

WordPressで翻訳ファイルを修正せずにテキストを変更する方法
http://www.warna.info/archives/1581/

登録ユーザーのプロフィール項目は追加・削除することができます。
会員制サイトをつくるときなどに便利ですね。

function my_user_meta($hoge) {
    //不要な項目の削除
    unset($hoge['aim']);
    unset($hoge['jabber']);
    unset($hoge['yim']); 
    //項目の追加
    $hoge['user_sex'] = '性別';
    $hoge['user_blood'] = '血液型';
    return $hoge;
}
add_filter('user_contactmethods', 'my_user_meta', 10, 1);

WordPressの管理画面から指定できるパーマリンク設定は固定ページには適用されないので、functions.phpに以下のようなアクションを追加して設定します。

function my_init() {
	global $wp_rewrite;
	$wp_rewrite->page_structure = $wp_rewrite->root . '%pagename%.html';
	flush_rewrite_rules( false );
}
add_action( 'init', 'my_init' );

‘%pagename%.html’の部分を、管理画面から行なうパーマリンク設定と同じ書式で記述すればOKです。上記の例では、投稿スラッグの後ろに「.html」を追加してhtml風のURLに見せています。

「.html」を追加するだけであれば「.html on PAGES」などのプラグインがありますが、他のプラグインとコンフリクトを起こすことがあるので、シンプルな機能追加はなるべくfunctions.phpを使って、自分で簡潔に記述するのがよいと思います。

なお、

flush_rewrite_rules( false );

上記は本来パーマリンク設定を変更する際に一度だけ実行すればよい処理なので、コメントアウトしてアップし、管理画面>設定>パーマリンク設定で「変更を更新」ボタンを押すことで代用できます。

管理画面の見た目をカスタマイズしたい場合、テーマフォルダの中に新しくCSSファイルを用意して、管理画面から読み込まれるように設定するのがよいです。

functions.phpに以下を書き加えます。

function my_custom_admin_css(){
  wp_enqueue_style('my-admin', get_bloginfo('template_url') . '/my-admin.css');
}
add_action('admin_print_styles', 'my_custom_admin_css');

※「my_custom_admin_css」「my-admin.css」は任意の名前でOK。

公開されたサイトHTMLソースを見ると、ヘッダー部分に

<meta name="generator" content="WordPress x.x.x" />

のような表記があります。
WordPressを使っていることがバレないように、もしくは使用しているバージョンを判別されないようにするには、functions.phpに以下を書き加えます。

remove_action('wp_head', 'wp_generator');

ログイン時に最上部に表示される管理バーを非表示にする方法。
functions.phpに以下を加えます。

add_filter( 'show_admin_bar', '__return_false' );

ループまとめ

ワードプレスでのサイト構築はループに始まりループに終わると言っても過言ではありません。
というわけでループについて簡単にまとめておきます。

基本ループ

<?php if(have_posts()): while(have_posts()): the_post(); ?>
//ほげほげ
<?php endwhile; endif; ?>

普通のブログであれば、大抵はこれだけで済みます。
現在のページ(トップページ、カテゴリページなど)に適合した投稿内容を表示してくれます。

have_posts()
表示すべき投稿記事があれば「true」を返し、なければ「false」を返します。表示対象となる投稿記事はページに依存します。
the_post()
投稿情報を読み込み、その情報をカスタムタグ(the_contentなど)で使えるように準備します。

基本ループをカスタマイズ

基本ループで呼び出される投稿は、デフォルトではそのページ(トップページ、カテゴリページなど)に依存しますが、基本ループの直前にこのコードを記述すると投稿を呼び出す条件が変更されます。

<?php query_posts($query_string.'&posts_per_page=5&cat=1,3'); ?>

上記だと、カテゴリID1または3に属する投稿が5件毎に呼び出されます。

query_posts()
基本ループで呼び出す投稿の条件(デフォルトはページに依存)を指定する。
$query_string
主に現在の表示ページ数などを表わす文字列。ページナビゲーションを利用する場合などに必須なので、特に問題が無ければ最初から付けておくとよいです。

ただし、この方法は条件分岐タグ(is_home()、is_category()など)の動作に影響を与えるので注意が必要です。

マルチループ

自由に投稿一覧を表示させたい場合は以下のループを使用します。

<?php $myposts = get_posts('numberposts=5&category=1'); ?>
<?php foreach($myposts as $post): ?>
<?php setup_postdata($post); ?>
//ほげほげ
<?php endforeach; ?>
get_posts()
ページに関係なく任意の投稿記事を読み込み、その情報を使えるように準備する。対象となる投稿記事は引数で指定する。
setup_postdata()
投稿データをカスタムタグ(the_contentなど)経由で呼び出せるように準備する。基本ループの「the_post()」に相当。あるいはこれは使用せず、「<?php echo $post->ID; ?>」という風に投稿データを直接呼び出してもよいです。

細かい挙動については、また個別にエントリを書こうと思います。

カテゴリページにて、そのカテゴリの記事一覧を表示する方法。
特殊な状況下ではこのような方法も有効かと思います。

ポイントは「get_query_var(‘cat’)」で現在のカテゴリIDを取得できるところでしょうか。あまり知られていないような気がしますが、僕が知らなかっただけかもしれません。

<ul>
<?php
if (have_posts()) :
$cat_id = get_query_var('cat');
$query = 'cat=' . $cat_id. '&showposts=99';
query_posts($query) ;
while (have_posts()) : the_post();
?>
<li><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></li>
<?php endwhile; endif; ?>
</ul>

WordPressは携帯電話からメールで更新することもできます。

Ktai Entry(メール投稿プラグイン)
http://wppluginsj.sourceforge.jp/ktai_entry/

  1. GMailのアカウントを新規取得。このメールアドレスに送信すると記事が投稿されるようにします(GMail以外のメールアドレスでもよいのですが、GMailのメールサーバは絵文字を処理してくれるので便利です)。
  2. GMail>設定>メール転送と POP/IMAP 設定の「POP ダウンロード」で「今後受信するメールでPOPを有効にする」を選択します。
  3. プラグインのファイル一式をwp-content/plugins/にアップする。
  4. WordPress管理画面>プラグインで「Ktai Entry」を有効にする。
  5. WordPress管理画面>設定>メール投稿で「投稿受付メールアドレス」にGMailのメールアドレスを入力する。
  6. WordPress管理画面>設定>投稿設定で「メールでの投稿」にGMailの情報を入力する(メールサーバは「ssl://pop.gmail.com」、ポートは「995」)。
  7. 上記設定欄の下にある「メール投稿用カテゴリーの初期設定」も選択しておく。
  8. WordPress管理画面>ユーザで投稿用ユーザを追加する。その際、投稿する携帯電話のメールアドレスをユーザのメールアドレスとして設定しておく。
  9. cronで定期的にwp-content/plugins/ktai_entry/retrieve.php(メールをチェックするプログラム)を実行するように設定する。

以上で完了。最後のcronは設定しなくてもよいですが、その場合、投稿が反映されるタイミングが「誰かがサイトにアクセスしてからn分後」という微妙なものになります。
その他、詳細はKtai Entryの公式サイトまで。