サポート » 使い方全般 » 一般公開ではないページが「ページ属性>親」のPOPUPに出てこない

  • コミュニティーの皆様、いつもお世話になっております。

    今回は、非公開のページ群を作成中に発見した困ったことを相談させて下さい。

    今、運用中のサイトで新コーナーを作成中です。
    その新コーナーは、親-子-孫の3回層、数十ページで構成されていますが、
    親を非公開にしていると、
    子ページ作成画面の「ページ属性>親」のPOPUPに親ページが出てこないので、
    子ページ以下のページ作成が出来ない状態です。

    親ページを下書きや予約投稿の状態に変えて試してもみましたが、
    一般公開にしない限りは「ページ属性>親」のPOPUPに親ページ名が出てきません。

    また、一時的に親ページを公開状態にして、配下のページを作成しても、
    親ページを一度非公開にしてしまうと、親子関係が切れてしまうために、
    ページツリーを構成し直さなければなりません。

    これは、仕様でしょうか?バージョン特有のバグでしょうか?
    もしも仕様ということならば、
    ・非表示のページも「ページ属性>親」のPOPUPに含ませる
    ・親ページを非表示にしても、配下のページとの親子関係が崩れない
    ようには出来ないでしょうか?

    来週頭に提出のためかなり焦っております…
    どなたか、情報もしくは、お知恵を拝借出来れば幸いです。

    ご検討の程、どうぞ宜しく御願いいたします。

10件の返信を表示中 - 1 - 10件目 (全10件中)
  • meta-boxes.php を見ると、wp_dropdown_pages を使っているので、公開ページのみリストアップされるのがおそらく仕様(or初期設定)です。

    wp_dropdown_pages の引数に 'post_status' => array('publish', 'private') を加えれば非公開ページも対象にできます。

    ただしこの方法は
    ※コアの改変になる(コアを変えないでできるかは不明)
    ※データベースの整合性等のチェックも必要になる
    になります。もし行う場合は、全て自分のリスクで行ってください。

    トピック投稿者 formless

    (@formless)

    早々のご返答をどうも有り難うございます!

    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 のソースを順に追って行っても分かります)

    トピック投稿者 formless

    (@formless)

    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

    トピック投稿者 formless

    (@formless)

    php-web様

    詳細な情報をどうも有り難うございました。

    新バージョンで複数ステータス対応済みという事は、
    旧バージョンでの解決策は直ぐには見つからなさそうですね…

    往生際が悪くて申し訳ないのですが、
    もう数日、未解決のままとさせて下さい。

    宜しくお願いいたします。

    親ページを公開にして、テンプレートで

    wp_page_lists('exclude=親ページ');

    というのではダメなのですか?

    トピック投稿者 formless

    (@formless)

    pluto1234さん

    レスを有り難うございます!

    その親ページがすこし特殊で、
    ある日時までは一般公開してはいけない情報を含んでおり、
    ナビに表示されていなくても
    URLが分かったら中身が見えてしまうという状態が許されないのです。
    (ちなみに、パーマリンクももの凄く複雑なものにしています。)

    以下、発見した(解決方法ではなく)回避方法なのですが、
    親ページを複雑な文字列でパスワード保護して、
    その中身が空のまま、子ページを作成し、
    最後に親ページの中身を作って、非表示設定にすると、
    親子関係は保たれたままになるようなので、
    裏技的にこのフローを使って、今回は凌ごうかと思います。
    ただ、この裏技の後に、子ページを弄ってしまうと
    親子関係が崩れてしまうようなので、
    かなりヒヤヒヤなのですが…

    ただ、非表示のままで親子関係のあるページを仕込みたいケースは
    今後も十分に発生しうりますし、
    PHPをバージョンアップ出来ない事情が解消されない限り、
    WPも3.2には出来ないので、当面のところは、
    この危うげなフローで行かなくてはいけないかと思うと、
    やはり、根本的な解決方法を見つけねば、とは思っています。

    なにやら、ややこしいサイトなのですね。あとは、
    アクセス制限(閲覧制限)のプラグインを入れて、ある時期がくるまで、親・子ページに閲覧制限をかけ、一定のロール以上だけ閲覧可能にすればよいのでは?

    トピック投稿者 formless

    (@formless)

    pluto1234様

    再び、ご返信有り難うございます。
    ややこしいケースですみません(汗)

    頂いたアイディアの延長線上で以下のように考えました。

    誰でも見れる”第2の公開日”を、ページ毎にカスタムフィールドで指定。
    ⇒公開していても、”第2の公開日”までは、特定ユーザーレベル以下の人は404リダイレクト
    (もしくは、テンプレートを404.phpにすげ替え?)

    こうすれば、そのURLの存在自体も知られないですむのかなと思いました。
    (リダイレクトしてしまうと、WPに詳しい方には
     「なんかやってんなー」って感じでしょけれども…)

    まだサンプルも作ってみていないので上手く行くか分かりませんし、
    自作出来る範疇なのかもいまいち不明ですが、
    追って進捗をご報告します!

10件の返信を表示中 - 1 - 10件目 (全10件中)
  • トピック「一般公開ではないページが「ページ属性>親」のPOPUPに出てこない」には新たに返信することはできません。