WordPressでWebサイトを運営してみると、案外絞込みが使い辛い事に気がつきました。絞込みっていってもデフォルトではこれ日付でしか絞込みできないんですよね。固定ページで親子関係持たせてたらやっぱ親子関係持った記事絞りこんだ方が、更新が効率的にできると思うんですよね。まぁ正直ろくな方法ではないものの、無理くり引っ付けたので、同じようなことで困ってる人は試してみてはいかがでしょうか。
INDEX
まずは親ページのIDを取得する
まず親ページのIDをどんな手段使っても良いから記憶します。親ページのIDは固定ページ一覧出した時のリンクの「?post=n」って書いてあるとこのnがIDです。
例えば、概要が親ページだとしたらこんな感じで調べる事ができますよね。もちろん他の方法もありますが、手っ取り早いのがこの方法です。
固定ページ一覧に細工する
固定ページの一覧を管理画面から開くとURLが
https://hogehoge.com/wp-admin/edit.php?post_type=page https://hogehoge.com/wp-admin/edit.php?post_type=page&parent_check=n //nに親のIDを入れる
こうすることで、親ページの一覧がでますねー。
きゃーすてきー。
でもめんどいわー
ここで終わりでも良いんですけど、これだとアレ過ぎるので、もう少し便利にしてみましょう。
例えば、edit.phpの中にSelectつけて親ページで子ページ検索できる!みたいになったら嬉しいですよね。
ただ、それをやるには問題が立ちはだかりますね。
1、全親IDを取得しなければいけない
2、HTMLを一覧ページに書かなくてはいけない
3、クエリに親IDをぶちこまなければいけない
まぁおおまかに3つくらいの壁が立ちはだかるわけですけれども、これらを解消していきましょう。
親IDの取得
さっきやった方法で事足りる場合は良いのですけど、例えばページ数が多い場合に、一個一個親かどうか確認してID拾っていくのは非常に面倒くさいです。僕はやりたくないです。なのでさっき説明をはしょった、別の方法を使い、親ページのIDを取得していくことにします。
こんな感じでいかがでしょう。
HTMLを固定ページ一覧に追加する方法
これにはフックを使って、追加していきます。restrict_manage_postsってフックなんですけど、これはrestrict_manage_postsはフィルターのsubmitボタンの前に挿入されるらしいですが、edit.phpで一覧出してる時に絞込み検索ボタンの前に出る奴って覚える方が良さそうです。覚え方なんて人それぞれなので、あくまでお勧めするにとどめておきます。
そして、ここでなんと、selectタグにさっき記憶したIDを書き込んで行きます!
なんでやねん!!!ってなると思いますが、こうしないと、親ページ検索した後に、WP_Queryが上手く動作しなくなるので、僕は無理くりoptionのvalueに親IDをぶち込みました。WP_Queryを復活させる呪文知ってる人が居たら教えて下さい。
ほんでとりあえずはこうなります。
クエリに親IDをぶちこむ
今度はposts_whereっていうフィルタフックを使います。これでどうやらwhereの拡張ができるみたいです。とにかく親IDをぶちこんでやりましょう。
こんな感じでぶちこんでやればいいですね。これで無事機能追加されてると良いですよねー。
おまけ
投稿した後に、前の親ページ一覧に戻りたい場合は、edit_form_topってフック使えば、投稿ページにHTMLなりPHPなり仕込むことができます。自分なりの戻るボタンをぶちこんでやりましょう。