WordPress XMLRPC投稿でカテゴリー作成

WordPressでXMLRPC投稿時にカテゴリーを自動で設定したいという相談がありちょっと調べてみた。

WordPressでカテゴリー作成するには,通常管理画面から行なうことになるが,php内からももちろん作成が可能である。以下のAPIがwp-includes/taxonomy.phpに用意されているので,これを使用すればよいだろう。

wp_insert_term($cat_name, 'category', array('slug'        => $slug,
'parent'      => $parent,
'description' => $description));

なお,admin内であれば以下のショートカットAPIを使うとよりシンプルかと思われる。このAPIは,wp-admin/includes/taxonomy.phpで定義されている。

wp_create_category($cat_name, $parent = 0);

でここから,階層構造をもつカテゴリーを一度に複数指定したい場合。

これには,ちょっとはまってしまった。まず,カテゴリー作成が行なわれた場合,term関連のテーブルが更新され,clear_term_cache関数により各種wpキャッシュが削除され,さらにcategory_childrenという子カテゴリーのリストを保存するデータがwp_optionsテーブルから削除される。しかし,clear_term_cache関数では,static指定でtaxonomy(ここでは,category)のキャッシュをクリアしたどうかのフラグが管理されており,category_childrenの削除は最初の一度しか有効にならない。よって,階層構造をもつカテゴリーを一度に複数作成した場合,最初に作成した時のみcategory_childrenが削除され,残りの作成したカテゴリーに適用されない。category_childrenオプションは,管理画面のカテゴリー画面で使用されている値のため,結局表示されるカテゴリーリストとテーブルデータとの間に差異が生じ,カテゴリー階層が正しく表示されないことになる。

結局,以下のようにキャッシュを強制的に削除することで対応した。

// clean_term_cache関数より引用
$texonomy = 'category';
wp_cache_delete('all_ids', $taxonomy);
wp_cache_delete('get', $taxonomy);
delete_option("{$taxonomy}_children");
_get_term_hierarchy($taxonomy);

このやり方は正攻法でないかもしれないし,そもそも一度に階層構造をもつカテゴリー指定を行なうこと自体が推奨されないのかもしれない。

 

byebyehaikikyou

日記やIT系関連のネタ、WordPressに関することなど様々な事柄を書き付けた雑記です。ITエンジニア経験があるのでプログラミングに関することなどが多いです。

シェアする

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

コメントする

Translate »