[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