get_post関数について
連続投稿。
前記事と同じくパン屑リストのことなので迷ったが別記事にした。
実はArtisteerで作成したテーマにて
プラグイン「Breadcrumb NavXT」を適用すると
ページの中のページ(つまり子ページ)に入った際に
パン屑リストが上手く表示されなかった。
で、その解決に至るまでのメモ(というか、愚痴・・・か?)
まずテーマによるものって判るまでにかなり時間を掛けてしまったorz
プラグインの干渉???それともwordpressを2.9.1にしたから???
プラグインのバグ???とか色々試行錯誤・・・(T_T)
ただ、テーマを変えてみると普通に表示されることが発覚!
おぉ!って事はArtisteer(で作成したテーマ)が悪いんじゃん!ってことで
やっと原因の特定に至る。
結論としては、
パン屑リスト表示前にテーマのメニュー部分の表示する動きとして
テーマ内のfunction.phpののart_activeIDという関数を通るのだが、
その中でget_page関数が呼ばれている。
(↑get_page自体はwordpressのwp_include/post.phpに実体がある)
さらにget_page中で呼ばれるget_post関数の
引数にてグローバル変数を参照渡しで渡していて
get_post関数でグルーバルの$postを配列から見つかった子のpostidに書き変えていた。
(↑get_postもwordpressのwp_include/post.phpに実体がある)
・・・ん?じゃあ、get_page読んでるだけのArtisteer作成テーマは無実じゃん!!
書き変わってるところではglobalの$postに対し宣言すらしてないし!!
そもそも$postに直idの値を入れて良いのか???
プラグイン作成する時にも、そんなこと想定して作成してないってば!!
・・・と、憤りさえ感じたが、まぁ、WP本体なので仕方がない・・・。
ま、とにかく$postが書き変わってしまった為に
その後にBreadcrumb NavXTが呼ばれても
正しく$postが取れないくて表示されなかった・・・という訳だ。
テーマ内の関数の動きとして、
子のIDを取って自分の配列に入れるって事をやりたいだけのようなので
そのget_page前にグローバルのpostをクローンで複製しておいて
関数最後にpostの中身を元に戻す動きに変え、正しく表示されるようになった♪
ふぅ~疲れた・・・。
あと、今回根本的なこととして
知ったのだが、
get_page関数はidを参照渡しにしているので、
idを数字で直指定することは出来ない!