• 解決済 jp008899

    (@jp008899)


    PEARのXMLRPCライブラリを利用した外部からのワードプレスへの記事投稿をテストしております。

    サーバ情報:
    WordPressバージョン:3.4.2
    PHPバージョン:5.1.6
    MySQLバージョン:5.0.95

    色々とネットから情報を寄せ集めて以下のソースにブログIDを投げて記事投稿するところまではうまくいきました。

    //うまくいったPHP実行ファイルソース(カスタムフィールド無し)

    $title = ‘テストタイトル’.date(‘n/j’,$oneweek).’-‘.date(‘n/j’,time()).’)’;
    $categories = array(
    new XML_RPC_Value(‘テストカテゴリー’, ‘string’),
    );
    $description = “HTMLテスト本文”;
    $tags = array(
    new XML_RPC_Value(‘テストタグ1’, ‘string’),
    new XML_RPC_Value(‘テストタグ2’, ‘string’)
    );
    $content = new XML_RPC_Value(
    array(
    ‘title’ => new XML_RPC_Value($title, ‘string’),
    ‘categories’ => new XML_RPC_Value($categories, ‘array’),
    ‘description’ => new XML_RPC_Value($description, ‘string’),
    ‘mt_keywords’ => new XML_RPC_Value($tags, ‘array’),
    ‘wp_slug’ => new XML_RPC_Value(‘テストスラッグ’.date(‘Yms’),’string’),
    ‘dateCreated’ => new XML_RPC_Value(time(), ‘dateTime.iso8601’)
    ),
    ‘struct’);
    $publish = new XML_RPC_Value(1, ‘boolean’);
    $message = new XML_RPC_Message(
    ‘metaWeblog.newPost’,
    array($blog_id, $username, $passwd, $content, $publish)
    );
    $result = $c->send($message);
    if(!$result){
    exit(‘Could not connect to the server.’);
    } else if( $result->faultCode() ){
    exit($result->faultString());
    }
    ?>

    しかし、さらにプラグインで利用しているSEOツールの「All in One SEO Pack」のカスタムフィールドへの代入がうまくいきません。

    具体的には「All in One SEO Pack」の場合、DB内のwp_postmetaテーブル内にSEO向けのタイトル、SEO向けのディスクリプション、SEO向けのキーワードが格納されているみたいで、wp_postmetaテーブルには4つのフィールド(meta_id,post_id,meta_key,meta_value)があります。

    今回の外部投稿において例えばSEO向けのタイトルであれば、meta_keyフィールドに「_aioseop_title」という値を代入してmeta_valueフィールドに「SEOテストタイトル」という値を代入すれば良いと思われるのですが、まず第一歩としてカスタムフィールド代入(meta_keyへの代入のみ)部分を追加した以下のソースを実行してphpMyAdminで直接DBを確認するとフィールド「meta_key」に’meta_key’という値が代入されて、フィールド「meta_value」に’_aioseop_title’の値が代入されてしまっています。(本来であれば、フィールド「meta_key」に’_aioseop_title’を代入したい。)

    //うまくいかないカスタムフィールド代入部分追加ソース

    $title = ‘テストタイトル’.date(‘n/j’,$oneweek).’-‘.date(‘n/j’,time()).’)’;
    $categories = array(
    new XML_RPC_Value(‘テストカテゴリー’, ‘string’),
    );
    $description = “HTMLテスト本文”;
    $tags = array(
    new XML_RPC_Value(‘テストタグ1’, ‘string’),
    new XML_RPC_Value(‘テストタグ2’, ‘string’)
    );
    $custom_fields = array();
    $custom_fields[] = new XML_RPC_Value(
    array(
    ‘key’ => new XML_RPC_Value(‘meta_key’,’string’),
    ‘value’ => new XML_RPC_Value(‘_aioseop_title’,’string’)
    ),’struct’);
    $content = new XML_RPC_Value(
    array(
    ‘title’ => new XML_RPC_Value($title, ‘string’),
    ‘categories’ => new XML_RPC_Value($categories, ‘array’),
    ‘description’ => new XML_RPC_Value($description, ‘string’),
    ‘mt_keywords’ => new XML_RPC_Value($tags, ‘array’),
    ‘wp_slug’ => new XML_RPC_Value(‘テストスラッグ’.date(‘Yms’),’string’),
    ‘dateCreated’ => new XML_RPC_Value(time(), ‘dateTime.iso8601’),
    ‘custom_fields’ => new XML_RPC_Value($custom_fields, ‘struct’)
    ),
    ‘struct’);
    $publish = new XML_RPC_Value(1, ‘boolean’);
    $message = new XML_RPC_Message(
    ‘metaWeblog.newPost’,
    array($blog_id, $username, $passwd, $content, $publish)
    );
    $result = $c->send($message);
    if(!$result){
    exit(‘Could not connect to the server.’);
    } else if( $result->faultCode() ){
    exit($result->faultString());
    }
    ?>

    meta_key、meta_valueはあくまでフィールド指定の為のkeyのつもりなのですが、なぜか値として入ってしまっている感じです。

    どこかおかしな部分、気になる部分などございますでしょうか?

4件の返信を表示中 - 1 - 4件目 (全4件中)
  • Fumito MIZUNO

    (@php-web)

    最近はPEARライブラリではなくフレームワークを使っているので、昔の記憶で書いていますので間違ってたらすいません。

    $custom_fields[] = new XML_RPC_Value(
    array(
    'key' => new XML_RPC_Value('meta_key','string'),
    'value' => new XML_RPC_Value('_aioseop_title','string')
    ),'struct');


    `$custom_fields[] = new XML_RPC_Value(
    array(
    ‘key’ => new XML_RPC_Value(‘_aioseop_title’,’string’),
    ‘value’ => new XML_RPC_Value(‘SEOテストタイトル’,’string’)
    ),’struct’);
    にしたら、望み通りの結果になると思いますが、いかがでしょう。

    トピック投稿者 jp008899

    (@jp008899)

    早速のご回答ありがとうございます。

    上記内容にソースを変更して実行してみたところ、今度はカスタムフィールド以外の部分は問題なく代入されましたが、肝心のカスタムフィールド部分はレコード自体が作られていない状態となってしまいました。(meta_id,post_id,meta_key,meta_valueの4つのフィールド全て値が代入されていない状態です。)
    ちなみにPHPファイルの実行自体は問題なく終了して特にエラーも出ませんでした。

    今はフレームワークを使った方法というのも勉強不足でピンときていないのですが、同様の内容を行うのに別の方法も検討したほうが宜しいでしょうか?

    Fumito MIZUNO

    (@php-web)

    手元で試してみました。

    ■ 3.4.1の場合
    ‘key’ => new XML_RPC_Value(‘_aioseop_title’,’string’),
    のように、キーが_で始まる場合はダメみたいですね。
    ‘key’ => new XML_RPC_Value(‘aioseop_title’,’string’),
    ならOKでした。

    ■ 3.3の場合
    キーが_で始まる場合も通りました。
    (投稿編集が面では見えないが、get_post_metaで取得できた)

    なので、
    「_で始まる場合も許可するようにWordPressを書き換える」か
    「キー名を変更し、_で始まらない名前にする」か
    「wordpress3.4で導入されたwp.newPostを使う
    http://codex.wordpress.org/XML-RPC_WordPress_API/Posts#wp.newPost (ただしこの方法でキーが_で始まる場合も通るかは未検証)」
    等が考えられます。

    トピック投稿者 jp008899

    (@jp008899)

    ご回答ありがとうございます。
    しかもわざわざWPのバージョン別に試していただいて感謝です。

    なるほど確かに「_」を外したところ、こちらでも同様にうまくいきました!
    PEARライブラリの記事は古いものが多くてこんな落とし穴はどこにもなかったので、3.4からこの様になったのでしょうかね。

    原因が分かったのでとてもスッキリしました。
    ご指摘の通りWPでの書き換えもしくはwp.newPostでの方法も検討してみようと思います。

    迅速なご対応、本当にありがとうございました。

4件の返信を表示中 - 1 - 4件目 (全4件中)
  • トピック「PEARのXMLRPCライブラリ使用によるカスタムフィールドへの代入」には新たに返信することはできません。