デスクトップからすべてのブログを自動化するためのアプリケーションを作成していました。ターゲット、ブログを投稿します。それで全部です。あなたが "xmlrpc.php"を知っているように、私はXMLRPCserviceを使いました。
私はほとんど完成していない部分を作成しました...しかし、アンダースコア(_)で始まるカスタムフィールドにこだわっていました。 "_thumbnail_id" =>(int)の番号で保存したいのですが。何も起こらなかった。
しかし、私が "thumbnail_id"またはそのようなものを試したときに、アンダースコアで始めなかった。大丈夫です。うまく機能しますが、下線で始めます...
投稿の特集画像を決めるために必要です。そのタグがなければ。できませんでした。そして私は代替案を知りません。
私はこれを見つけます: https://wordpress.org/support/topic/how-can-i-change-protected-params-xmlrpc しかし私の問題を解決していません。ワードプレスファイルを変更したくありません。必要な場合は、RPCなしで小さなスクリプトを書くことができます。
どんな手助けもファンタスティックになります!
$remote_post_id
を使って注目の画像を特定の投稿に設定したいとしましょう。
これを300
と等しいIDの添付ファイルにしたいので、_thumbnail_id
を300
にします。
これを実現する方法は3つあります。
post_thumbnail
を使うpost_thumbnail
パラメータで注目の画像を更新/追加することは可能です。
$result = $client->query(
'wp.editPost',
array(
$blog_id,
$username,
$password,
$remote_post_id,
$post_data = array(
'post_thumbnail' => '300',
),
)
);
[wp_xmlrpc_server
] [1]クラスに見られるように。
custom_fields
とmeta_id
の併用投稿のカスタムフィールドを更新したい場合は、それがデータベースのmeta_id
値であることを知っておく必要があります。
しかし、どのようにしてmeta_id
を知るのでしょうか。
次のように投稿を取得すると、カスタムフィールドは実際にはデフォルトで含まれます。
$result = $client->query(
'wp.getPost',
array(
$blog_id,
$username,
$password,
$remote_post_id,
)
);
投稿におすすめの投稿サムネイルがある場合、上記の結果にはこの部分が含まれます。
<member>
<name>custom_fields</name>
<value>
<array>
<data>
<value>
<struct>
<member>
<name>id</name>
<value>
<string>560</string>
</value>
</member>
<member>
<name>key</name>
<value>
<string>_thumbnail_id</string>
</value>
</member>
<member>
<name>value</name>
<value>
<string>200</string>
</value>
</member>
</struct>
</value>
</data>
</array>
</value>
</member>
meta_id
は、例えば560
で、古いmeta_value
は200
です。
これで_thumbnail_id
のメタ値を新しい値で更新できます。
$result = $client->query(
'wp.editPost',
array(
$blog_id,
$username,
$password,
$remote_post_id,
$post_data = array(
'custom_fields' => array(
array(
'id' => '560',
'key' => '_thumbnail_id',
'value' => 300
)
),
),
)
);
meta_id
の部分を飛ばした場合、 this trac で導入された[add_post_meta()
] [2]の代わりに、update_metadata_by_mid()
のみを実行することに注意してください。edit_post_metaの機能も必要です。
アンダースコア(_)で始まるメタキーはprotectedなので、これだけではありません。
リモートサイトで[register_meta()
] [3]関数を使うことでそれを修正できます。
例えば:
/**
* Unprotect the _thumbnail_id meta key to allow updates via XML-RPC
* We need to set this up on the remote site.
*/
add_action( 'init', function() {
register_meta( 'post', '_thumbnail_id', 'absint', '__return_true' );
});
_thumbnail_id
メタキーの保護を解除します。最初にintval
をサニタイズコールバックとして試しましたが、うまくいきませんでした。
他の保護されたメタキーにも同様の設定を使用できます。
@MarkKaplunが彼の答えで述べたように、私たちは私たちのニーズにXML-RPC設定を拡張することができました。例えばxmlrpc_methods
フィルタを使って独自のメソッドを追加することができます。
コーデックス はそのことに関するより多くの情報を提供します。
これをテストしている間私を助けたいくつかのリンクはここにあります:
https://github.com/WordPress/WordPress/blob/master/wp-includes/class-wp-xmlrpc-server.php
オートマットの「シンジケーション」レポ@GitHub:class-syndication-wp-xmlrpc-client.php
コンテンツタイプ標準@GitHub (props @kaiser) - そしてより具体的に この問題 は同じリポジトリでregister_meta()
のユースケースをもう少し詳しく説明しています。
アンダースコア化メタデータは、ソフトウェアの内部にあり、ユーザによって直接変更されないデータであると定義されます。おそらくこれがXMLRPCで変更できない理由です。
この種の機能が必要な場合は、XMLRPCで変更できるデータのセットを拡張する小さなプラグインを書くことができます。
しかし、あなたが質問するのは特に注目の画像に関するものなので、添付ファイルを注目の画像として関連付けることができるAPIを探す必要があります。 Fast googleはそのための文書を何も出しませんでしたが、人々はそれをうまくやったようです https://stackoverflow.com/questions/12355922/set-featured-image-for-wordpress-post-via-xml-rpc 。