人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

WordPressにPHPからカテゴリを作成
現在、XML-RPC経由でWordPressを使っております。
記事の投稿はできるのですが 「新しくカテゴリを作成」 する方法がわかりません。
右記ページによると http://ppmweb.lolipop.jp/notes-wordpress-xml-rpc-api/#wp_newCategory
wp.newCategory というメソッドを使えばできるようですが
XML-RPCについて詳しく知らないため、自分ではコードが書けません。
下記のサンプルコード(投稿用になります)に付け加えるような形で、
wordpressに新しいカテゴリを作成するコードを教えてください。
ちなみにPEARパッケージの、Services_Bloggingを使ってます。

require_once 'Services/Blogging.php';
$bl = Services_Blogging::factory(
'MetaWeblog',
'username', 'password',
'blog.example.com', '/xmlrpc.php'
);
$post = $bl->createNewPost();
//$post->setId('14');
$post->title = '記事タイトルです。';
$post->content = "ここは記事の文です。";
$post->categories = array('カテゴリ1', 'カテゴリ2');
$bl->savePost($post);
$nLastPostId = $post->id;
echo 'post id: ' . $nLastPostId . "\r\n";

●質問者: ty2016
●カテゴリ:コンピュータ ウェブ制作
○ 状態 :終了
└ 回答数 : 3/3件

▽最新の回答へ

1 ● a-kuma3
●25ポイント

http://pear.php.net/package/Services_Blogging/download/0.2.3/

から、ソースを落として読んでみました。

XML-RPC のメソッドを隠してるあたりが、Blogging/Driver/MetaWeblog.php ですが、

実装されてるメソッドが、以下の五つだけです。


wp.newCategory のように、上記以外のメソッドは、残念ながら Services_Blogging では利用できません。


2 ● a-kuma3
●25ポイント

カテゴリの新規登録のエッセンスを書きだすと、こんな感じになると思います。

<?php
 require_once("XML/RPC.php");

 $GLOBALS['XML_RPC_defencoding'] = "UTF-8";
 
 $host = "サイトのURL";
 $xmlrpc_path = "/xmlrpc.php";

 $blog_id = ブログID;
 $user = ユーザー名;
 $pass = パスワード; 

 $category_name = カテゴリ名;
 $category_slug = カテゴリスラッグ;
 $category_parent_id = 親のID;
 $category_description = カテゴリの説明;
 

 $client = new XML_RPC_client($xmlrpc_path, $host, 80);
 
 $blog_id = new XML_RPC_Value($blog_id, 'int');
 $user = new XML_RPC_Value($user, 'string');
 $pass = new XML_RPC_Value($pass, 'string');

 $category = new XML_RPC_Value(
 array(
 'name' => new XML_RPC_Value($category_name, 'string'),
 'slug' => new XML_RPC_Value($category_slug, 'string'),
 'parent_id' => new XML_RPC_Value($category_parent_id, 'int'),
 'description' => new XML_RPC_Value($category_description, 'string')
 ),
 'struct');

 $request = new XML_RPC_Message(
 'wp.newCategory',
 array($blog_id, $user, $pass, $category)
 );

 $response = $client->send($request);
?>

メソッド名と、パラメータの型や意味は、↓で調べます。

http://codex.wordpress.org/XML-RPC_wp


後、Services_Blogging じゃありませんが、XML_RPC を使うライブラリを書いている人がいました。

http://shoji.blog1.fc2.com/blog-entry-179.html

でも、blogger メンバーが構築されて無いような気がするので、このままでは使えないような気がします。


3 ● rouge_2008
●50ポイント ベストアンサー

既に回答されていますが、MetaWeblog APIではカテゴリーの作成が出来ませんので、新規カテゴリーの作成だけWordPress APIを使用してはいかがでしょうか?


http://www.moonmile.net/blog/archives/1416


各APIの対応状況は上記ページの通りですが、新バージョンの3.2.xの場合は、「wp-includes/class-wp-xmlrpc-server.php」で確認できます。

function __construct() {

$this->methods = array(

// WordPress API

'wp.getUsersBlogs' => 'this:wp_getUsersBlogs',

'wp.getPage' => 'this:wp_getPage',

'wp.getPages' => 'this:wp_getPages',

'wp.newPage' => 'this:wp_newPage',

'wp.deletePage' => 'this:wp_deletePage',

'wp.editPage' => 'this:wp_editPage',

'wp.getPageList' => 'this:wp_getPageList',

'wp.getAuthors' => 'this:wp_getAuthors',

'wp.getCategories' => 'this:mw_getCategories', // Alias

'wp.getTags' => 'this:wp_getTags',

'wp.newCategory' => 'this:wp_newCategory',

'wp.deleteCategory' => 'this:wp_deleteCategory',

'wp.suggestCategories' => 'this:wp_suggestCategories',

'wp.uploadFile' => 'this:mw_newMediaObject', // Alias

'wp.getCommentCount' => 'this:wp_getCommentCount',

'wp.getPostStatusList' => 'this:wp_getPostStatusList',

'wp.getPageStatusList' => 'this:wp_getPageStatusList',

'wp.getPageTemplates' => 'this:wp_getPageTemplates',

'wp.getOptions' => 'this:wp_getOptions',

'wp.setOptions' => 'this:wp_setOptions',

'wp.getComment' => 'this:wp_getComment',

'wp.getComments' => 'this:wp_getComments',

'wp.deleteComment' => 'this:wp_deleteComment',

'wp.editComment' => 'this:wp_editComment',

'wp.newComment' => 'this:wp_newComment',

'wp.getCommentStatusList' => 'this:wp_getCommentStatusList',

'wp.getMediaItem' => 'this:wp_getMediaItem',

'wp.getMediaLibrary' => 'this:wp_getMediaLibrary',

'wp.getPostFormats' => 'this:wp_getPostFormats',

// Blogger API

'blogger.getUsersBlogs' => 'this:blogger_getUsersBlogs',

'blogger.getUserInfo' => 'this:blogger_getUserInfo',

'blogger.getPost' => 'this:blogger_getPost',

'blogger.getRecentPosts' => 'this:blogger_getRecentPosts',

'blogger.getTemplate' => 'this:blogger_getTemplate',

'blogger.setTemplate' => 'this:blogger_setTemplate',

'blogger.newPost' => 'this:blogger_newPost',

'blogger.editPost' => 'this:blogger_editPost',

'blogger.deletePost' => 'this:blogger_deletePost',

// MetaWeblog API (with MT extensions to structs)

'metaWeblog.newPost' => 'this:mw_newPost',

'metaWeblog.editPost' => 'this:mw_editPost',

'metaWeblog.getPost' => 'this:mw_getPost',

'metaWeblog.getRecentPosts' => 'this:mw_getRecentPosts',

'metaWeblog.getCategories' => 'this:mw_getCategories',

'metaWeblog.newMediaObject' => 'this:mw_newMediaObject',

// MetaWeblog API aliases for Blogger API

// see http://www.xmlrpc.com/stories/storyReader$2460

'metaWeblog.deletePost' => 'this:blogger_deletePost',

'metaWeblog.getTemplate' => 'this:blogger_getTemplate',

'metaWeblog.setTemplate' => 'this:blogger_setTemplate',

'metaWeblog.getUsersBlogs' => 'this:blogger_getUsersBlogs',

// MovableType API

'mt.getCategoryList' => 'this:mt_getCategoryList',

'mt.getRecentPostTitles' => 'this:mt_getRecentPostTitles',

'mt.getPostCategories' => 'this:mt_getPostCategories',

'mt.setPostCategories' => 'this:mt_setPostCategories',

'mt.supportedMethods' => 'this:mt_supportedMethods',

'mt.supportedTextFilters' => 'this:mt_supportedTextFilters',

'mt.getTrackbackPings' => 'this:mt_getTrackbackPings',

'mt.publishPost' => 'this:mt_publishPost',

// PingBack

'pingback.ping' => 'this:pingback_ping',

'pingback.extensions.getPingbacks' => 'this:pingback_extensions_getPingbacks',

'demo.sayHello' => 'this:sayHello',

'demo.addTwoNumbers' => 'this:addTwoNumbers'

);


・カテゴリ作成のコード

http://codex.wordpress.org/XML-RPC_wp#wp.newCategory

require_once("IXR_Library.php");

$rpc = new IXR_Client("http://blog.example.com/xmlrpc.php");

$status = $rpc->query(
 "wp.newCategory",
 "1",
 "UserName", // username
 "Password", // password
 array(
 "name"=>"カテゴリ1",
 "slug"=>"category1",
 "parent_id"=>"", // 親カテゴリのID
 "description"=>"カテゴリ1について" //カテゴリの説明
 )
);

$data = $rpc->getResponse( );
//print_r( $data ); 出力確認

//上記の処理以降に、MetaWeblog APIによる投稿のコードを記述します。



「IXR_Library.php」は次のページでダウンロードできます。

http://scripts.incutio.com/xmlrpc/


rouge_2008さんのコメント
クライアント作成の記述を忘れていたので追記修正しました。

rouge_2008さんのコメント
1つずつしか作成できないようですので、カテゴリを複数作成したい場合は、複数回処理を行ってください。

ty2016さんのコメント
無事、動作しました。 本当に素晴らしい回答をありがとう御座います。
関連質問

●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ