2020年2月時点でWordPressとPHPが超初心者のオラは、記事を仕込んでいるときに内部リンクをしたい衝動にかられました。WordPressの段落ツールボックスにリンク設定ボタンがありますよね。これを使おうっと。リンクを設定するために文字を選択してリンク設定ボタンを押すとリンク先のポップアップが出てきます。
こんなやつですね。「ほぉ🤔、検索ができるのか」と思い単語を入力しましたが何も出てきません。なんで?と思いいろいろと試してみると公開済投稿だけがひっかかってくるようでした。しょうがないのでリンク先のURLを手打ちで試みましたが3回目くらいで気力が萎えました。どう考えても検索した方が早い--。
そこでWordPressのフックを使ってマイナーチェンジしたいと思います。この解決方法を導いた過程は「下書きを含めた投稿リストの表示 探索編」に記載しています。
フックのコードは使用しているテーマフォルダにあるfunctions.phpに記述するのが望ましいという記述をネットで見ました。WordPressの固有のファイルを直接記述するとWordPressのバージョンアップされると上書きされる恐れがあるからだそう。
でも、それって各テーマのfunctions.phpも同様な気が--。
なので投稿とか固定ページにコードを下書きで保存しておくことをお勧めします。
クラシックエディター用
//リンクリストのフック。公開だけでなく、ドラフトも追加
//クラシックエディター用
function _clasicEditorLinkList ( $data ) {
//class-wp-editor.phpに定義しているフィルター適用コマンド
//$query = apply_filters( 'wp_link_query_args', $query );
// データを加工して返す
$data['post_status']='draft,publish'; //下書きと公開を対象にする
return $data ;
}
add_filter( 'wp_link_query_args', '_clasicEditorLinkList' );
ブロックエディター用
//リンクリストのフック。公開だけでなく、ドラフトも追加
//ブロックエディター用
function _blockEditorLinkList ( $data ) {
//class-wp-query.phpに定義している、全ての処理後に起動コマンド
//do_action_ref_array( 'parse_query', array( &$this ) );
// データを加工して返す
if($data->is_search)
{
//リンクをajaxで検索するとき
//define( 'REST_REQUEST', true )でREST APIを使っているようなので
//条件で絞り込む。絞り込みが無いと本番Webでも下書きが表示されるので注意
if(defined( 'REST_REQUEST' ))
{
if(REST_REQUEST)
{
$data->query_vars['post_status']='draft,publish'; //下書きと公開を対象にする
$data->query['post_status']='draft,publish'; //下書きと公開を対象にする
}
}
}
return $data ;
}
add_filter( 'parse_query', '_blockEditorLinkList' );
注意するところは if(REST_REQUEST) です。これが無いとテーマによっては本番環境で検索等したときに下書きも抽出されます。なので、もしかしたら皆さんが利用しているテーマでも不具合が発生するかもしれません。ご注意ください。