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 );

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

MySQLで文字列置換するSQL。
よく忘れるのでメモ。

UPDATE テーブル名 SET カラム名=REPLACE (カラム名, '置換前', '置換後');

Facebookページにタブを追加する方法です。Facebookの仕様はコロコロ変わるので、あくまでもこの記事を書いている時点(2012年1月)での方法です。

1.開発者登録

とりあえず省略します。
あとで書き足すかもしれません。

2.開発者サイトでアプリを新規作成

Facebook開発者サイトの上部メニュー「アプリ」をクリックしてアプリ画面へ。
https://developers.facebook.com/apps

「新しいアプリケーションを作成」をクリックしてアプリ作成を開始します。
「App Display Name(表示名)」は自由に分かりやすい名前を、「App Namespace(名前空間)」はシステム内で扱われる識別子になるので半角小文字もしくは記号で入力します。

3.アプリの基本設定

アプリを新規作成すると基本設定画面に遷移します。
「アプリをFacebookに結合する方法を選択してください」の欄で「ページタブ」をクリック。
ページタブの設定項目が開くので、ページタブ名とURL(NoSSL/SSL)を入力します。

4.詳細設定画面でアプリページ作成

左メニュー「詳細設定」をクリックして詳細設定画面へ。
画面の一番下の方の「Facebookページを作成する」をクリックすると、確認ダイアログが開くので「承認」をクリックするとアプリページが作成されます。

この手順の意味がよく分かりませんが、そういうものだと思って作成しておいてください。

5.ページにタブとしてアプリを組み込む

Facebookページにアプリをタブとして組み込むには、javascriptSDKが必要なようです。ただ、その方法はとても面倒なので、ブラウザのアドレス入力欄に以下のURLを入力します。

https://www.facebook.com/dialog/pagetab?app_id=YOUR_APP_ID&display=popup&next=YOUR_URL
YOUR_APP_ID
タブとして追加したいアプリのAPP ID(基本設定画面に載ってます)
YOUR_URL
先ほど基本設定で入力した「Secure Page Tab URL」

ページタブを追加するためのダイアログが開きます。
プルダウンから、ページタブを追加したいFacebookページを選んで追加ボタンをクリックすれば完了です。

管理画面の見た目をカスタマイズしたい場合、テーマフォルダの中に新しく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' );

さくらVPSでやりたかったこと、それはcicindelaのインストール。

公式ドキュメントに沿って進めつつ下記を参考にしました。
http://wp.serpere.info/archives/1100

途中、PerlモジュールのインストールでRPMforgeが必要になるので導入。
http://centossrv.com/rpmforge.shtml

mod_perlのインストールは下記のコマンドでOK。簡単。

yum -y install mod_perl

ただしこれだけでは動かないので、confファイルの設定は下記を参考にしました。
http://vok.paburica.org/index.php?Apache%2Fmod_perl導入(CentOS)

daemontoolsのインストールは前述のページだと分かりにくかったので以下を参考に。
http://kaiseki-web.lhd.nifs.ac.jp/wiki/index.php/Daemontools

mysqlのrootユーザをパスワード無しログイン不可に設定してあるので、cicindela用データベース作成の際は-pオプションが必要です。
こんな感じ。

perl create_init_sql.pl --db_name=cicindela_db | mysql -uroot -p

公式ドキュメントのデモを実行するためにはperlモジュールのText::CSV_XSが必要。

perl -MCPAN -e shell
install Text::CSV_XS