WordPressのページを、スラッグ(slug)を使って文字列を取得する方法です。
念のため、スラッグとはURLのパスの事です。たとえば「https://my-blog.com/the-page-slug」というURLであれば、「the-page-slug」という文字列部分が、いわゆるスラッグです。
スラッグからページを取得する関数
関数にしました。やっている事は極めてシンプルです。説明のシンプルのため、エラーセーフ行はほとんど省いています
/** * Get a page object by slug. * https://codex.wordpress.org/Template_Tags/get_posts */ function wc_get_page_by_slug( $slug = '' ) { $pages = get_posts( array( 'post_type' => 'page', 'name' => $slug, 'posts_per_page' => 1 ) ); return $pages ? $pages[0] : false; }
get_posts()関数は、投稿オブジェクトの配列を返してくるので、必要な最初の要素だけを参照してやります。扱いやすいように、見つからなければfalseです。
投稿をクエリして取得する時の注意
よくある間違い(?)が、query_posts()を使ってしまう例です。query_postsはメインクエリを操作する関数ですので、今回のようなカスタムクエリに使う代物ではありません。
正しいワードプレスの知識に基づけば、あなたが、query_postsを使う事は(ほぼ)絶対にないはずです。
スラッグってなんなのさ
このスラッグは、ワードプレスのpostテーブル(投稿を格納するテーブルです。)にカラムとして格納されています。1投稿(ページ)あたり1スラッグ、格納する場所が最初から用意されているってことですね。
postテーブルのカラム、貼っておきます。「post_name」ってのがそれですね。スラッグで投稿をクエリする、というのは、post_nameでマッチするやつをクエリする、というそれだけの処理です。
mysql> show columns from wp_posts; +-----------------------+---------------------+------+-----+---------------------+----------------+ | Field | Type | Null | Key | Default | Extra | +-----------------------+---------------------+------+-----+---------------------+----------------+ | ID | bigint(20) unsigned | NO | PRI | NULL | auto_increment | | post_author | bigint(20) unsigned | NO | MUL | 0 | | | post_date | datetime | NO | | 0000-00-00 00:00:00 | | | post_date_gmt | datetime | NO | | 0000-00-00 00:00:00 | | | post_content | longtext | NO | | NULL | | | post_title | text | NO | | NULL | | | post_excerpt | text | NO | | NULL | | | post_status | varchar(20) | NO | | publish | | | comment_status | varchar(20) | NO | | open | | | ping_status | varchar(20) | NO | | open | | | post_password | varchar(20) | NO | | | | | post_name | varchar(200) | NO | MUL | | | | to_ping | text | NO | | NULL | | | pinged | text | NO | | NULL | | | post_modified | datetime | NO | | 0000-00-00 00:00:00 | | | post_modified_gmt | datetime | NO | | 0000-00-00 00:00:00 | | | post_content_filtered | longtext | NO | | NULL | | | post_parent | bigint(20) unsigned | NO | MUL | 0 | | | guid | varchar(255) | NO | | | | | menu_order | int(11) | NO | | 0 | | | post_type | varchar(20) | NO | MUL | post | | | post_mime_type | varchar(100) | NO | | | | | comment_count | bigint(20) | NO | | 0 | | +-----------------------+---------------------+------+-----+---------------------+----------------+
スラッグとページ取得に関する参考リンク