meta-boxes.php を見ると、wp_dropdown_pages を使っているので、公開ページのみリストアップされるのがおそらく仕様(or初期設定)です。
wp_dropdown_pages の引数に 'post_status' => array('publish', 'private')
を加えれば非公開ページも対象にできます。
ただしこの方法は
※コアの改変になる(コアを変えないでできるかは不明)
※データベースの整合性等のチェックも必要になる
になります。もし行う場合は、全て自分のリスクで行ってください。
早々のご返答をどうも有り難うございます!
wp_dropdown_pages の引数に ‘post_status’ => array(‘publish’, ‘private’) を加えれば非公開ページも対象にできます。
頂戴したアドバイスを以下のように早速試してみたのですが、
今度はdropdownが丸ごと出力されなくなってしまいました。
改造前 (meta-boxes.php 539行目)
$pages = wp_dropdown_pages(array('post_type' => $post->post_type, 'exclude_tree' => $post->ID, 'selected' => $post->post_parent, 'name' => 'parent_id', 'show_option_none' => __('(no parent)'), 'sort_column'=> 'menu_order, post_title', 'echo' => 0));
改造後
$pages = wp_dropdown_pages(array('post_type' => $post->post_type, 'exclude_tree' => $post->ID, 'selected' => $post->post_parent, 'name' => 'parent_id', 'show_option_none' => __('(no parent)'), 'sort_column'=> 'menu_order, post_title', 'echo' => 0, 'post_status' => array('publish', 'private') ));
wp_dropdown_pagesのリファレンスを調べてみると、’post_status’は、wp_dropdown_pagesのパラメーターリストに載っていませんでした。
get_pagesでは、’post_status’をパラメーターとして受け取れるようなので、
post-template.phpからwp_dropdown_pagesをコピーして
wp_dropdown_pages_plus_private みたいなものを作って
すげ替えてやればいいのかなと考えております。
コアをほとんど弄った事がないのでおそるおそるではありますが、
試してみて、またご報告します。
【追記】
meta-boxes.php内にwp_dropdown_pages_plus_privateを作ってみましたが、
見事に失敗しました..
引き続き、皆様のアドバイスをお持ち申し上げます。
うちのテスト環境では下記コードで、ドロップダウンメニューが表示されます。
$pages = wp_dropdown_pages(array('post_type' => $post->post_type, 'exclude_tree' => $post->ID, 'post_status' => array('publish', 'private'), 'selected' => $post->post_parent, 'name' => 'parent_id', 'show_option_none' => __('(no parent)'), 'sort_column'=> 'menu_order, post_title', 'echo' => 0));
WP3.21英語版、プラグイン無し、日本語リソースも無し、での状態ですが。
wp_dropdown_pagesのリファレンスを調べてみると
codexを良く読みましょう。デフォルト設定されたパラメータがリストされているだけですよ。それ以外は get_pages のパラメータが(動作保証されていないが)可能、となっています。(codexを読む他に、wp_dropdown_pages => get_pages のソースを順に追って行っても分かります)
php-web様、再び、アドバイスをどうも有り難うございます。
いただいたコードを試してみましたが、
やはり、popup自体が出力されなくなってしまいました。
こちらの環境は、WP3.0.4日本語版、plugin多数、php5.1.3です。
pluginも全てオフにして試しましたが、
やはり、popup自体が表示されない状態です。
また、phpのバージョンアップが、もろもろの事情で出来ないため、
WP3.2にはアップグレード出来ない境遇でございます。
codexの件、大変失礼いたしました。
以降、熟読の上、発言するように気をつけます。
そもそも、きちんとしたプログラマでない私が
首を突っ込みうる領域を超えているとは自覚しておるのですが
なにせ自体が緊急なもので、先走ってしまいました。
重ねてお詫び申し上げます。
PS
「パスワード保護」状態の公開ページは、popupに出てくるので、
取り敢えずの回避方法で製作を進めております。
こちらの環境は、WP3.0.4日本語版、plugin多数、php5.1.3です。
trac を見たら、2011年5月に複数ステータス対応になっていますね。
http://core.trac.wordpress.org/changeset/17889
3.0.4はおそらく非対応でしょう。3.1系は微妙な所です。
将来的にはこの箇所にフィルターが用意されるらしいです。
http://core.trac.wordpress.org/attachment/ticket/8592/meta-boxes.diff
php-web様
詳細な情報をどうも有り難うございました。
新バージョンで複数ステータス対応済みという事は、
旧バージョンでの解決策は直ぐには見つからなさそうですね…
往生際が悪くて申し訳ないのですが、
もう数日、未解決のままとさせて下さい。
宜しくお願いいたします。
親ページを公開にして、テンプレートで
wp_page_lists('exclude=親ページ');
というのではダメなのですか?
pluto1234さん
レスを有り難うございます!
その親ページがすこし特殊で、
ある日時までは一般公開してはいけない情報を含んでおり、
ナビに表示されていなくても
URLが分かったら中身が見えてしまうという状態が許されないのです。
(ちなみに、パーマリンクももの凄く複雑なものにしています。)
以下、発見した(解決方法ではなく)回避方法なのですが、
親ページを複雑な文字列でパスワード保護して、
その中身が空のまま、子ページを作成し、
最後に親ページの中身を作って、非表示設定にすると、
親子関係は保たれたままになるようなので、
裏技的にこのフローを使って、今回は凌ごうかと思います。
ただ、この裏技の後に、子ページを弄ってしまうと
親子関係が崩れてしまうようなので、
かなりヒヤヒヤなのですが…
ただ、非表示のままで親子関係のあるページを仕込みたいケースは
今後も十分に発生しうりますし、
PHPをバージョンアップ出来ない事情が解消されない限り、
WPも3.2には出来ないので、当面のところは、
この危うげなフローで行かなくてはいけないかと思うと、
やはり、根本的な解決方法を見つけねば、とは思っています。
なにやら、ややこしいサイトなのですね。あとは、
アクセス制限(閲覧制限)のプラグインを入れて、ある時期がくるまで、親・子ページに閲覧制限をかけ、一定のロール以上だけ閲覧可能にすればよいのでは?
pluto1234様
再び、ご返信有り難うございます。
ややこしいケースですみません(汗)
頂いたアイディアの延長線上で以下のように考えました。
誰でも見れる”第2の公開日”を、ページ毎にカスタムフィールドで指定。
⇒公開していても、”第2の公開日”までは、特定ユーザーレベル以下の人は404リダイレクト
(もしくは、テンプレートを404.phpにすげ替え?)
こうすれば、そのURLの存在自体も知られないですむのかなと思いました。
(リダイレクトしてしまうと、WPに詳しい方には
「なんかやってんなー」って感じでしょけれども…)
まだサンプルも作ってみていないので上手く行くか分かりませんし、
自作出来る範疇なのかもいまいち不明ですが、
追って進捗をご報告します!