1. ホーム
  2. wordpress

[解決済み] WordPressで現在のページ名を取得するにはどうすればよいですか?

2022-04-29 08:10:53

質問内容

WordPressテーマで現在のページ名を取得するためのPHPコードを教えてください。

今まで見た解決策すべて

  • the_title()
  • get_page()->post_name
  • get_post()
  • その他

しかし、これらは投稿エントリーを含むページには使えません。これらはすべて、最新のブログエントリーの名前を返します。

別の言い方をすると、WordPressで"My News"という名前でページを作成したとします。このページは、"投稿ページ"として設定されています。このページに、いくつかの投稿を追加します。 さて、最新の投稿の名前ではなく、文字列 "my-news" を取得するためには、どのような API を使用すればよいでしょうか?


以下のような変数があり、うまくいきそうです。

$wp_query->queried_object->post_name

実はこれも探していたページ名(スラッグ)のURLフレンドリ版なのです。これはデフォルトのテンプレートでテストされました ( トゥエンティテン ). なぜ、以下に示す2つの変数が私のサイトで機能しないのか、本当によくわかりません。ありがとうございます。 キーチ のために print_r() 先端 .

さて、なぜこんなにも深いところに情報が隠されているのでしょうか。

どうすればいい?

WordPressのグローバル変数 $pagename が利用できるはずです。ご指定の設定と同じもので試したところです。

$pagename は、wp-includes/theme.php の関数内で定義されています。 get_page_template() もちろん、このファイルはページのテーマファイルが解析される前に呼び出されるので、ページ用のテンプレート内のどの時点でも利用可能です。

  • ドキュメントには記載されていないようですが $pagename 変数は、パーマリンクを使用している場合にのみ設定されます。使わない場合は、WordPressはページスラッグを必要としないので、設定されないからだと思います。

  • $pagename は、静的なフロントページとして使用する場合、設定されません。

  • これは、/wp-includes/theme.php 内のコードで、以下の時に指摘された解決策を使用しています。 $pagename を設定することができません。

--

if ( !$pagename && $id > 0 ) {
  // If a static page is set as the front page, $pagename will not be set. Retrieve it from the queried object
  $post = $wp_query->get_queried_object();
  $pagename = $post->post_name;
}