有効な関数が見つからず、とりあえず
switch_to_blog($blog_id);
global $wpdb;
$sql = "SELECT post_type FROM $wpdb->posts GROUP BY post_type ";
$sql .= "HAVING post_type != 'page' AND post_type != 'post' AND post_type != 'revision' AND post_type != 'attachment'";
$posttype_names = $wpdb->get_results($sql);
restore_current_blog();
で投稿データからpost/page/revision/attachmentを除くpost_typeを取得してみました。
ただ、この方法だと一件もその投稿タイプで投稿がない投稿タイプを取得できませんし、
post/page/revision/attachment 以外でカスタム投稿タイプでもないpost_typeが存在する場合(存在するのか知りませんが)対処できません。
何かいい方法はないでしょうか。
本当ですね。
いま試しにやってみたら switch が効かないですね。
カスタム投稿タイプの情報はデータベースには保存されておらず
register_post_type() でグローバル配列 $wp_post_types に都度格納してるだけみたいですね。
なのでデータベースを切り替える switch_to_blog() では取れません。。
#子サイトの functions.php を読んで register_post_type() の記述からカスタム投稿の情報を正規表現で抽出しちゃうとか。
#ところで wp_filter_object_list() って関数?の定義が見当たらないのは何故。
カスタム投稿の作成にはCustom Post Type UIを利用しているのでfunctions.phpを読み込んでも情報を取得できないのです。と書いてふとCustom Post Type UIはどこに情報保存してるんだ?と思い調べてみたところ、wp_optionのcpt_custom_post_typesにカスタム投稿情報が収納されていました。これでCustom Post Type UIがインストールされている場合は情報が取得できるようになりました。ない場合はregister_post_type()の記述から・・・というのも考えましたが、他のプラグインでカスタム投稿を作成してる可能性も考えるといまいちですかねえ?
実はさきほどちょうどそのケースに遭遇しました。
ゆえに、まだ使う前だったので Custom Post Type UI での管理に置き換えました。
functions.php でカスタム投稿タイプが作成された場合は、これで問題ないのですか?
同じ問題に行き当たり、このスレッドにたどり着きました。
右往左往した挙句、解決(?)できたようなので方法を書いておきます。
switch_to_blog($blog_id);
cpt_create_custom_post_types();
$post_types=get_post_types();//「blog_id」のカスタム投稿が取得できるようになった
restore_current_blog();
$post_types=get_post_types();//何もしなくても、スイッチ前のカスタム投稿が取得できる
・
・
・
switch_to_blog($blog_id); //再度スイッチ
$post_types=get_post_types();//何もしなくても、一度取得した「blog_id」のカスタム投稿はあいかわらず取得できる
restore_current_blog();
ちなみに、
cpt_create_custom_taxonomies();
を記述すると、カスタム分類でも同じようなことができました。