子ページが属する親ページのリストを取得する方法(WordPress)
WordPressで現在開いているページの属する親ページのページIDを取得する方法
自ページが属する親ページのリストを取得できれば後は、get_page()関数でページオブジェクトを取得し、親ページのタイトルを表示することも出来ます。
コード
以下のコードをお使いのテーマのfuncton.phpに記述しておきます。
//wp_head()実行時にget_pageid()を実行
add_action('wp_head', 'get_pageid');
//現在のページIDを記録しておく(他のウィジェットや関数に書き換えられても良いように)
function get_pageid()
{
global $post,$_cur_page;
$_cur_page = $post;
}
//現在のページの属する親ページのIDリストを取得
function get_page_parent_list()
{
if( !is_page() ) return array();
global $_cur_page;
$curr_page = $_cur_page;
$hierarchy[] = $curr_page->ID;
while($curr_page->post_parent) {
$curr_page = &get_post($curr_page->post_parent);
$hierarchy[] = $curr_page->ID;
}
return $hierarchy;
}
何かとこの方法を知っていると応用が効きます。
コードの説明
- $postsや$postはグローバル変数である
- プラグインやテンプレート関数、ウィジェットの中にはグローバル変数を書き換えてしまうものが存在する(かもしれない)
- 後で実行するグローバル変数を参照する情報ほど当てにならない
wp_head()時に現在のページ情報を予め別変数で取っておくことで、他が$postsや$postが書き換えられても大丈夫なようにしています。
親ページのタイトル一覧を取得する方法
先に載せたコードと一緒に使用します。
function get_page_parent_title()
{
if( !is_page() ) return array();
global $_cur_page;
$curr_page = $_cur_page;
$hierarchy[] = apply_filters( 'the_title', $curr_page->post_title);
while($curr_page->post_parent) {
$curr_page = &get_post($curr_page->post_parent);
$hierarchy[] = apply_filters( 'the_title', $curr_page->post_title);
}
return $hierarchy;
}
この後、得られた配列を元にタイトルをHTMLタグ等を付加して加工します。
最後に
元ネタはflexi-pages-widgetプラグインの中のコード
本当はフォーラムの答えとして書こうとしたのだけど、質問に対し要求されていることがよく読むと違うようなのでブログネタに。。。
汎用的なコードを書くって難しいですねぇ。。。
あわせて読む
コメント投稿