メールでの投稿の文字化け修正 WPME2.2.1

9月 3rd, 2007 admin

本ブログではWordPressME2.2.1を使っています。
ふとしたことからメールでの投稿を使ってみたくなったのですが、どうもうまくいかない・・・

デフォルトの仕様確認

  • メールを/wp-mail.phpがPOPで取得する
  • メールのサブジェクトがエントリーのタイトル、本文が本文に対応する

タイトルが文字化けする

ソースをみてみると、そもそもマルチバイト関係のことは考えてくれていないみたいなので文字化けして当然です。
タイトルと本文をPHPの内部エンコーディング(wp-config.phpで設定)に変換してやることにしました。
/wp-mail.php 132行目あたり

$content = trim($content);
$content = mb_convert_encoding(trim($content) , mb_internal_encoding(), "JIS");

/wp-mail.php 138行目あたり

if ($post_title == '') $post_title = $subject;
if ($post_title == ''){
$post_title = $subject;
$post_title = str_replace(array('=?ISO-2022-JP?B?','=?iso-2022-jp?B?','?='), '', $post_title);
$post_title = explode(" ", $post_title);
$decoded_title = '';
foreach($post_title as $k=>$v){
$decoded_title .= mb_convert_encoding(base64_decode($v) , mb_internal_encoding(), "JIS");
}

タイトルはやりかたを知らないので力技でデコード。要するにbase64デコードをして、JISから内部エンコードに変えているだけです。
よくわかんない人は、下記ダウンロードしてファイルごと上書きしてください。(バージョンを確認してね!)

付録

wp-mail.zip

本文が投稿されない。

上の作業でタイトルは文字化けしなくなりましたが、本文がありません。
本家をあたってみると、バグ報告がされていました。

#4337 (Blog by Email: No content is assumed) – WordPress Trac – Trac

すでに誰か偉い人がパッチを作ってくれていたのでclass-pop3.php.patchというのをあてたら修正されました。

付録

class-pop3.zip

自動で更新してくれない

あたりまえかもしれませんが、せっかくメールを送っても、wp-mail.phpにアクセスするまでメールをチェックしてブログを更新してくれません。
普通はcronという仕組みを使ってwgetしたりするのですが、今回は指定したURLに定期的にアクセスしてくれるWebcron
というサービスを使いました。ここでユーザ登録して/wp-mail.phpに1時間ごとにアクセスしてもらうように設定しました。
これでメールを送れば遅くても1時間後には更新されるようになったというわけです。

以上

wordpressのブログタイトルと記事名の間のセパレータを変更

8月 29th, 2007 admin

wordpress ME2.2.1を使ってます。
記事のタイトルのブログ名と記事名のセパレータが引用符になっていて、せっかく誰かがブクマしてくれたりしても?になってしまっていて悲しくなってしまうのを修正。
hatebu.gif
↑こういう状態

/wp-content/themes/テーマ名/header.php

もしくは管理画面から

表示>テーマエディタ>ヘッダー

にて6行目ぐらいでタイトルタグを出力しているので

< ?php if (function_exists('seo_title_tag')) { seo_title_tag(); } else { bloginfo('name'); wp_title();} ?>

ってところのwp_title()に値を入れてあげて

< ?php if (function_exists('seo_title_tag')) { seo_title_tag(); } else { bloginfo('name'); wp_title(' | ');} ?>

とかにしてあげればOK。
テーマが一杯あって面倒だって場合は、wordpressの方を直接書き換えてやる手もあります。
その場合は、/wp-includes/general-template.phpのfunction wp_titleの$wepを書き換えでOK。