[wordpress]XML_RPCで記事を新規投稿する際にID指定する方法


IMG_9105

記事と何の関係も無い写真にしてみました!

今日はWordPressでXML_RPCにて記事投稿する際、ID指定する方法を調べたので自分用にメモ。

IT/WEB業界への転職なら求人サイトGreen

概要

wordpressにて記事を新規投稿する場合、IDは自動で付与されますが
このIDをローカルで管理しているデータと統一したかったため、ID指定するカスタマイズについてまとめました。

カスタマイズ箇所

wp-includes/class-wp-xmlrpc-server.php
781行目付近

protected function _prepare_post( $post, $fields ) {
// Holds the data for this post. built up based on $fields.
$_post = array( 'post_id' => strval( $post['ID'] ) );
// Prepare common post fields.
$post_fields = array(
'import_id'        => $post['import_id'], // この行を追加
'post_title'        => $post['post_title'],
'post_date'         => $this->_convert_date( $post['post_date'] ),
'post_date_gmt'     => $this->_convert_date_gmt( $post['post_date_gmt'], $post['post_date'] ),
'post_modified'     => $this->_convert_date( $post['post_modified'] ),
'post_modified_gmt' => $this->_convert_date_gmt( $post['post_modified_gmt'], $post['post_modified'] ),
'post_status'       => $post['post_status'],
'post_type'         => $post['post_type'],
'post_name'         => $post['post_name'],
'post_author'       => $post['post_author'],
'post_password'     => $post['post_password'],
'post_excerpt'      => $post['post_excerpt'],
'post_content'      => $post['post_content'],
'post_parent'       => strval( $post['post_parent'] ),
'post_mime_type'    => $post['post_mime_type'],
'link'              => get_permalink( $post['ID'] ),
'guid'              => $post['guid'],
'menu_order'        => intval( $post['menu_order'] ),
'comment_status'    => $post['comment_status'],
'ping_status'       => $post['ping_status'],
'sticky'            => ( $post['post_type'] === 'post' && is_sticky( $post['ID'] ) ),
);
//中略
}

1357行目付近

if ( ! empty( $dateCreated ) ) {
$post_data['post_date'] = get_date_from_gmt( iso8601_to_datetime( $dateCreated ) );
$post_data['post_date_gmt'] = iso8601_to_datetime( $dateCreated, 'GMT' );
}
//ここから追加
if ( isset( $post_data['import_id'] ) ) {
$post_data['ID'] = wp_insert_post( array( 'post_title' => __( 'Auto Draft' ), 
'post_type' => $post_type, 
'post_status' => 'auto-draft',
'import_id' =>$post_data['import_id']  ) );
}
//追加ここまで
if ( ! isset( $post_data['ID'] ) )
$post_data['ID'] = get_default_post_to_edit( $post_data['post_type'], true )->ID;
$post_ID = $post_data['ID'];

これで設定は完了です。
import_idというkeyがあれば、ID指定して新規投稿できる様になりました。

XML_RPC投稿の方法

外部からWordPressに記事投稿する際に、XML_RPCを使います。
記事投稿にあたって、wp.xmlrpcをダウンロードします。

使い方

require_once('wp.xmlrpc.php');
$host     = 'hogehoge.net';
$user     = 'admin';
$password = 'mypassword';
$endpoint = 'http://hogehoge.net/xmlrpc.php';
$wp = new wpXMLRPC($endpoint, $host, $user, $password);
$data = array(
'import_id' => 10000,
'post_title' => 'タイトル',
'post_content' => '内容です!',
'post_thumbnail' => 'test.jpg', // 他ドメインも可
'terms_names' => array(
'post_tag' => array('タグ1', 'タグ2', array('name'=> 'タグ3', 'slug' => 'Tag3'))
)
);
$wp->newPost($data)

これで投稿が完了しました。
すでにIDが存在する場合には新規投稿できませんので、IDチェックは事前に必要です。

以上、XML_RPCで記事を新規投稿する際にID指定する方法でした。

 

この記事が気に入ったら
いいね!しよう

最新情報をお届けします

follow us in feedly