WordPress 2.8 の xmlrpc 経由の投稿で記事とメディアの関連がつかない場合

WordPress 2.8 リリースということでみなさん続々とアップデートされていますね! 🙂

そんなこんなで、twitter をのぞいていたら 2.8 以降の投稿で wp-kougabu の画像がでてこないという話がちらほら。 なんかやらかしたかと思ってみてみたら、どうも kougabu じゃない模様。 コアの不具合なのか、xmlrpc 経由の投稿だと記事とメディアがくくりつかない現象がでているようです。

記事とメディアのくくりつけは管理画面のメディアライブラリでみることができます。

xmlrpc02

ちょっと小さくて見づらいですが、”リンク先” という項目があって記事名がでているのが見えていると思います。 これがでているメディアは、記事が結びついているということになります。

wp-kougabu を使われている方は気がつきやすかったのですが、どうも 2.8 で xmlrpc 経由で投稿するとうまくこのリレーションが結びつかないようです。 実際には、(wp_)post テーブルの post_parents という項目で制御されています。

なんでだろーとおもって、xmlrpx.php を追っていく。 と、

$post_id = –1;

動きとしては、まず post_parents を –1 の未確定状態として画像を (wp_)posts に登録して、その後のシーケンスで –1 になっているものを探して、記事の id で post_parents を上書きするようになっています。

だがしかし、(wp_)post をみると 0 で登録されているのです。 なぜ?

ふと、(wp_)posts テーブルの DDL をみてみると、

CREATE TABLE wordpress_28x.wp_posts
(
    (略)
    ID                          BIGINT UNSIGNED NOT NULL,
    post_parent                 BIGINT UNSIGNED NOT NULL,
    (略)
)

ありゃ、UNSIGNED になっていますねぇ。。 これでは –1 は入りません。

というわけで、超ハックコードですが直し方。

xmlrpc.php を –1 で検索して、それを 999999 とかにしてください。(コメント含めて 3カ所)

とりあえず、なおるとおもいます。。。 このコードはいんちきなので、緊急避難という扱いでお願いいたします。

しかしながら xmlrpc 的にはこのへんあんまり変わってないぽいんですよね、、、なんでいままで動いていたか追う元気はありませんでした。 原因も間違ってたらごめんなさい。

2.8 ではデータベースのフィールドをみて SQL を組み立てるようになっているのですが、そのへんとからんで潜在的な不具合が出たのかもしれません。

xmlrpc01

trac みてないけどもうあがっているかな・・・。 xmlrpc 投稿をしている方はみてみてください~。

この投稿がうちのギャラリーにでてばとりあえずは、直ったということで。(ほんとにとりあえずですが。。

あとあと、これはまったく別件ですが、xmlrpx 経由の投稿でタグが削れるという環境的な問題が起きている方は Toru さんのエントリが参考になります。 (今の xampp が該当かもしれません

さくら+WordPressでHTMLタグが消えるバグ « Waviaei

Vistaを入れ直した際に、最近使い始めてたWLWな再インストールしたんですが、ローカルからサーバへ投稿した時になぜかHTMLタグの<や>が取り除かれると言う不具合が。再インストールが原因とも思わなかったけど、原因が分からずアンインストール。

しかしその原因と対策方法がようやく分かりました。

PHP がつかっている libxml2 ライブラリの問題ですが、以下のプラグインをいれると解決することができます。 Toru さんありがとうございました!

WordPress › LibXML2 Fix « WordPress Plugins

Work around for some versions of libxml2 2.7.x that strip out brackets when parsing XML. This plugin fixes XML-RPC requests that are mangled because of this problem. The real fix for this (making the use of this plugin unnecessary) is to use PHP 5.2.9+ with libxml2 2.7.3+.

WordPress 2.8 の xmlrpc 経由の投稿で記事とメディアの関連がつかない場合」への7件のフィードバック

  1. 師匠、休養中の所お騒がせしました〜 すみません、すみません。
    修正完了です。がxmlrpc ってブラウザからの投稿では関係ないですよねぇ?モブログ投稿もするので修正しておいたのですがブラウザ投稿での不具合も解消するんでしょうか?
    ま、ダメなら例の方法で一手間かけるだけでkougabu に表示してくれるので問題ないのですが。師匠の所でもブラウザからの通常のエントリーでこの不具合ってでました?

  2. いえいえ、すいません、すいません。 🙂

    はい、この修正はブラウザ投稿は関係ないはずなのです〜。

    ローカルでいくつか試した限りでは、ぼくの操作ではブラウザ経由でくくりつかない現象は再現できませんでした。 もしかしたら、なにか手癖が違うのかもしれませんね(笑)

    もしブラウザ投稿でもなったら教えてください!

  3. こんいちはこんいちは!

    2.7.1 まで unsigned 属性は付いてなかったので、そのせいかもかも?
    今までは ID 関係と user_level だけで、2.8 から全ての bigint(20) に unsigned が付いたとです。

  4. こんいちはこんいちは!

    そかー! さっきローカルのみて、wordpress_27x とかって DB みてて、あれぇまえから unsigned だなぁって思ってたら、trunk にスイッチしていたみたい、、ごめんぽ。。

    謎が解けて助かりました〜。
    ということはこれは不具合ですね。。
    チケットでるかなぁ。

  5. ピンバック: Tips Community

  6. ピンバック: 今週の管理人Bookmark (6/7-6/14) - ElectronicBrain is eating BreakFast

  7. ピンバック: links for 2009-06-14 | LOVE!?

コメントを残す