3

Wordpress XML-RPCを使用してブログに自動的に投稿しており、PHPから次の2つの関数wp.newPostとwp.uploadFileを機能させています。

ただし、以下に示すように1つのphpスクリプトで実行すると、(重要な部分が含まれているだけです)attachment_idが存在していても、投稿しようとするとWordpressがwp.uploadFileからattachment_idを検出しません。

//wp.newPost content
$content = array(
'post_title' => $title,
'post_content' => $body,
'post_status' => 'publish', 
'post_type' => 'products',
'post_thumbnail' = // wp.uploadFile is called here that returns attachement id
);

$this->Curl->post($url,$content);

上記のコードを実行しようとすると、「faultCode404faultString無効な添付ファイルID」が表示されます。

wp.​​uploadFileイメージが正常にアップロードされ、Wordpressライブラリに表示されていることを確認しました。実際、スクリプトを再度実行し、「post_thumbnail」の値をwp.uploadFileによって返されたものとまったく同じattachment_idに置き換えると、機能します。

したがって、上記のように2つの関数を組み合わせて実行した場合、Wordpressは画像がアップロードされたことを検出していないようです。これに対する解決策はありますか?Wordpressの添付ファイルIDを自分のデータベースに保存するのは本当に嫌です。

4

1 に答える 1

2

xmlrpc 経由で投稿するには、IXR を使用しています

require_once("IXR_Library.php.inc");

以下は私が使用しているものです。確かにいくつかの編集が必要ですが、いくつかの手がかりが得られるかもしれません

新しいファイルをアップロードするには:

$file_upload_path = get_post_meta ( $image->ID,'_wp_attached_file', false);
$file_path = $_SERVER['DOCUMENT_ROOT']."/dev/0.2/wp-content/uploads/".$file_upload_path[0];
$path_parts = pathinfo($file_path);
$file_name = $path_parts['filename'].'.'.$path_parts['extension'];
$data = array(
  'name'  => $file_name ,
  'type'  => $image->post_mime_type ,
  'bits'  => new IXR_Base64( file_get_contents( $file_path ) ) ,
  'overwrite' => true
);
$status = $rpc->query(
    'wp.uploadFile', 
    '1',
    $username,
    $password,
    $data
);
$image_returnInfo = $rpc->getResponse();

新しい投稿を作成するには:

$data = array(
    'post_title' => $post->post_title,
    'post_content' => $post->post_content . $attachement_string_hack,
    'post_type' => 'product',
    'post_status' => 'publish',
    'dateCreated' => (new IXR_Date(time())),
    'post_thumbnail' => $image_returnInfo['id']
);
$rpc = new IXR_Client( $rpc_url );
$res = $rpc->query('wp.newPost', '', $username, $password, $data, 0);

お役に立てれば!(私は今、投稿に画像を添付することにこだわっています)

于 2012-12-10T09:16:26.437 に答える