下書きを含めた投稿リストの表示 探索編

  • このエントリーをはてなブックマークに追加

2020年2月時点でWordPressとPHPが超初心者のオラは、記事を仕込んでいるときに内部リンクをしたい衝動にかられました。WordPressの段落ツールボックスにリンク設定ボタンがありますよね。これを使おうっと。リンクを設定するために文字を選択してリンク設定ボタンを押すとリンク先のポップアップが出てきます。

こんなやつですね。「ほぉ🤔、検索ができるのか」と思い単語を入力しましたが何も出てきません。なんで?

いろいろと試してみると公開済投稿だけがひっかかってくるようでした。しょうがないのでリンク先のURLを手打ちで試みましたが3回目くらいで気力が萎えました。どう考えても検索した方が早い--。

「じゃぁ、どんどん公開すればいいじゃないか」と言われそうですが、シリーズ化されていない記事は順にという公開よりもまとめて公開して閲覧者が好き勝手にジャンプする方に利便性が高いはずです。
そこで、下書き段階の投稿も検索結果に出て来るように設定したいからネットで検索してみました。ですが、同じような欲求を持っている人はいなかったらしくFIXするSolutionはありませんでした。皆さんは、下書きの記事にリンクなんて貼らないんですね。リンク先が未公開だったら404になっちゃいますので避けているのですかね。でもネット情報で一つだけ良いヒントをもらいました。それが「フック」という機能です。
説明はいいから解決策をと言う方は「下書きを含めた投稿リストの表示 解決編」を読んでください。

WordPressでのフック

Windowsアプリを作ったことがある方はメッセージフックと言えばピンとくるでしょう。似たような機能でWordPressではアクションフックとフィルターフックがあるようです。
両方のフックの位置付けを理解していませんが、そこはかみ砕いてショートカットで導入したいと思います。

第一の壁 WordPressのイベントドリブンがわからん

ページをリクエストしたとき何が起こっているのかがさっぱりわからん。もちろんPHPの文法すら知らん状態。ソースコード見ても「何やらガリガリとコーディングされているな」くらいしかわからず、ポップアップ画面を呼び出した位置とか、テキストボックスに文字を入力したときに起動するイベントの所在を簡単に発見することができない。
日頃からVisual Studio Professionalを活用しているオラは

デバッグモードで確認したいなぁ

と思い始めました。Visual Studio Professional でPHPをデバッグできるのか? そもそもIISでPHPが動くのか? ネット上ではIISでPHPを動かすことができるような記述があるが、そこにWordPressを載せることができるのであろうか。
ちょっと視点を変えて・・・。そもそもWordPressをWindowsマシンで起動できるのか? PHP部分は大丈夫そうだけどMySQLとうまく連携できるのか?お! WindowsマシンでWordPressを稼働させたいという衝動に駆られる方が多くいるようでXAMPP (ザンプ)を使うと解決できそうだ。肝心なデバッグはと・・・。XDebugを利用し Visual Studio Code でブレークポイントを設定できるらしい。よし!この道を進もう!🤗

第二の壁 WordPressがインストールできない

ちょっと欲を出してしまいました。ポート80番はローカルIISで使っているので別のポート番号を指定して Apache を起動。それ以外はネットで紹介されている手順でWordPressの起動を試みるがうまくいかない。いろいろと調べてみると80以外は一筋縄で行かないようです。今回の目的がWordPressの調整なので後々エラーが発生した時の切り分けも考慮し80で構築しました。そのためローカルのIISはしばらくお休み😪ということにしています。
無事にWordPressもインストールできて管理画面からアドインの追加とかテーマの追加など行ってブラウザーでテストページが表示できることを確認した。

第三の壁 Visual Studio Codeでデバッグできない

ここまできて、Visual Studio Codeを起動したことはあるが使ったことが無かったことに気付く。Visual Studio Professionalと同じ感覚で開こうとしたがソリューションファイルやプロジェクトファイルなんぞはない。どうしたもんかとメニューのファイルをみると「フォルダを開く」となんやら怪しい項目が--。早速WordPressのフォルダを選択してみると Visual Studio Professional のソリューションエクスプローラーらしき展開が😁よっしゃよっしゃ!
メニューでPF5がデバッグの開始であることを確認済みだ。と、その前にブレークポイントを数か所ポチポチと設定。 では、いつもどおりPF5でデバッグを開始させる。

待てど暮らせどブラウザーが起動しない

あれ?一度デバッグを停止して再度PF5。んー、ブラウザーはやはり立ち上がってこない。どこかで止まっているのかと思い、ステップオーバーPF10を押す。何も起こらない。全てのブラウザーウインドウを閉じ、再度PF5! -----変化なし。
ちぇ、ここまで悪戦苦闘してWordPressの設定したのに--。
寂しい気分のままChromeを立ち上げローカルのWordPressにアクセスした。さて、どうしたものかと管理画面で投稿ページを開こうとしたら応答がなく固まってしまった。
😥やれやれ、WordPressもダメになったか。--と思っていたら。

「ん?ブレークされている!」

なんてことはない。PF5でVisual Studio Codeがデバッグ体制に入るということでした。手順としてはVisual Studio Codeでフォルダを開いてブラウザーを自力で立ち上げ当該ページをリクエストすれば良いらしい。ネットで調べりゃ出ていたかもしれないが、Visual Studio Professionalを使っていたから固定概念が払しょくされていなかったのですよ。固定概念あるあるでした。

第四の壁 ポップアップ画面の呼び出し位置がわからん

ASP.NETとかClassic ASPと勝手が違うPHP。 はて、どうしたものか。編集ページのpost.phpのソースを見ても気になる箇所はない。恐らく、呼び出し元の呼び出し元とか奥深いところにロジックがあるのだろうと予測。 よし、ヒント集めをやろう。ネットで検索するようにVisual Studio Codeでキーワード検索をごりごり。キーワードは link、query、ajax など検索結果を眺めながら絞り込んでいく。発見しましたよ、とても気になる関数「 function wp_ajax_wp_link_ajax() 」が。早速ブレークポイントを設定してポップアップ画面で検索--。

ブレークポイントは空振り

😂へぇー、これじゃないんだ。関数の名前からして、絶対そうだと思うんですけど--。ネットを漁る。今使っているのはブロックエディターで、ネットで解説のほとんどがクラシックエディター。可哀想にクラッシックという冠を付けられちゃったのね。でも、クラシックエディターって今でも使えるのか、ありましたアドインが。
早速、クラシックエディターを試してみる。

来たーーーー!

なるほど。この関数はクラシックエディタ―用だったのか。最悪、クラシックエディタ―で書き書きすることにしよう。
でも、ブロックエディターも攻略したいね。違う攻め方で追い詰めなくては--。あ💡!wp_queryが胆だったな。関数リファレンスを読む--。
サンプルコードを見るが面食らった。なんて表現したらよいのでしょうかね、関数を呼び出すだけでグローバルな変数に自動にセットされる。つまり、abc()  と記述したら varXYZに値が登録されるってこと。オブジェクト指向に慣らされる身からすれば不安でしょうがない。それは置いといて--。
お?メソッドに init() を発見。初期化だろうね。普通のコーディングならば最初に初期するでしょうね。早速 wp_query が記述されているclass-wp-query.phpのfunction init()にぽちっとブレークポイントを設定。

来たーーーー!

来ましたよ。ここまでくれば、ステップオーバー、ステップイン、ステップアウトを繰り返し、ブレークポイントを変えてさらに ステップオーバー、ステップイン、ステップアウト をやっていくうちに「ここだ!」のコードを発見しました。
本番環境にフック用のコードをタイプして、投稿の編集時に希望通りに検索ができるかチェック。大満足じゃ。--そして翌朝に気付く。

公開Webサイトに下書きも全て表示されている!!!

原因はわかっているので、追加したコードをコメントアウト。ローカル環境でデバッグしてみると、確かにホームの投稿一覧で表示されるし、フックの関数も通過していることがわかる。
ホームでの検索と投稿編集での検索の違いがわかれば--。
ホームの検索と投稿編集での検索を比較してみると投稿検索のときだけ REST_REQUEST が定義されていて true を設定している。
とりあえず、この条件を追加してみた。もしかしたら、ホームの検索以外でも影響が出るかもしれない。まぁ、自己責任ということで。

では「下書きを含めた投稿リストの表示 解決編」を読んでください。

SNSでもご購読できます。