174

WordPressテーマで現在のページ名を取得するために使用できるPHPコードは?

これまでに見たすべてのソリューション:

  • the_title()
  • get_page()->post_name
  • get_post()

ただし、これらは投稿エントリを含むページでは機能しません。これらはすべて、最新のブログ エントリの名前を返します。

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


機能しているように見える次の変数を見つけました。

$wp_query->queried_object->post_name

これは実際にはページ名 (slug) の URL フレンドリ バージョンであり、これも私が探していたものです。これは、デフォルトのテンプレート ( Twenty Ten ) でテストされました。以下に示す 2 つの変数が私のサイトで機能しない理由がよくわかりません。ヒントをくれたkeatchprint_r()感謝します。

では、なぜこの情報が奥深くに隠されているのでしょうか。

4

19 に答える 19

201

WordPress グローバル変数$pagenameが利用できるはずです。私はあなたが指定したのと同じセットアップで試しました。

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

  • 文書化されていないよう$pagenameですが、パーマリンクを使用する場合にのみ var が設定されます。これは、使わないと WordPress がページスラッグを必要としないので設定しないからだと思います。

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

  • $pagenameこれは /wp-includes/theme.php 内のコードで、設定できない場合に指摘した解決策を使用します。

--

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;
}
于 2011-01-29T15:58:28.283 に答える
44

ページのスラッグ名を取得するための私のアプローチ:

$slug = basename(get_permalink());
于 2011-09-30T11:10:10.793 に答える
27
<?php wp_title(''); ?>

これは私にとってはうまくいきました。

私の理解が正しければ、投稿エントリがあるページでページ名を取得したいと考えています。

于 2011-03-10T17:24:54.030 に答える
25

わかりました。ループのにページ タイトルを取得する必要があります。

$page_title = $wp_query->post->post_title;

参照を確認してください: http://codex.wordpress.org/Function_Reference/WP_Query#Properties

する

print_r($wp_query)

ループの前に、$wp_queryオブジェクトのすべての値を確認します。

于 2011-01-29T15:09:59.807 に答える
9

functions.php ファイル内から現在のページにアクセスしようとしている場合 (つまり、ループの前、データ$postが入力される前、$wp_query初期化される前など)、サーバー変数自体にアクセスする以外に選択肢はありません。要求されたページをクエリ文字列から抽出します。

$page_slug = trim( $_SERVER["REQUEST_URI"] , '/' )

これは「ばかげた」解決策であることに注意してください。たとえば、スラッグ「近日公開」のページもp=6. そして、パーマリンク設定が に設定されていることを前提としていますpagename(とにかく、そうあるべきです!)。

それでも、制御されたシナリオがある場合は、便利な小さなトリックになる可能性があります。ログインしていない訪問者を「近日公開」ページにリダイレクトしたい状況でこれを使用しています。しかし、恐ろしい「リダイレクト ループ」にそれらを投げ込まないようにする必要があるため、このルールから「近日公開」ページを除外する必要があります。

global $pagenow;
if (
        ! is_admin() &&
        'wp-login.php' != $pagenow &&
        'coming-soon' != trim( $_SERVER["REQUEST_URI"] , '/' ) &&
        ! is_user_logged_in()
){
   wp_safe_redirect( 'coming-soon' );
}
于 2013-04-04T20:57:31.067 に答える
6

これを試して:

$pagename = get_query_var('pagename');
于 2012-09-10T10:41:22.010 に答える
5

私はより簡単な解決策を考え出しました。

wp_title() から返されたページ名の値を取得します。空の場合はホームページ名を出力し、そうでない場合は wp_title() の値をエコーし​​ます。

<?php $title = wp_title('', false); ?>

最初の引数で区切りを削除してから、display を false に設定して、変数への入力として使用することを忘れないでください。次に、見出しなどのタグの間にコードをぶつけます。

<?php if ( $title == "" ) : echo "Home"; else : echo $title; endif; ?>

それは私にとってはうまくいき、最初のが抽出したいセクションで宣言されていることを確認し$titleます。これは、さまざまな変数を返すように調整できます。

于 2013-09-09T02:42:46.807 に答える
4

使用する:

$title = get_the_title($post);
$parent_title = get_the_title($post->post_parent);

echo $title;
echo $parent_title;
于 2011-10-27T18:40:25.627 に答える
2

ページ ID やスラッグではなく、実際にクエリされたページを探している場合の 1 つのオプションは、クエリをインターセプトすることです。

add_action('parse_request', 'show_query', 10, 1);

関数内で $wp オブジェクトにアクセスでき、ページ名または投稿名を次のように取得できます。

function show_query($wp){
     if ( ! is_admin() ){ // heck we don't need the admin pages
         echo $wp->query_vars['pagename'];
         echo $wp->query_vars['name'];
     }
}

一方、投稿データが本当に必要な場合は、最初に取得する場所 (このコンテキストでは間違いなく最良の場所) は次のとおりです。

add_action('wp', 'show_page_name', 10, 1);

function show_page_name($wp){
     if ( ! is_admin() ){
        global $post;
        echo $post->ID, " : ", $post->post_name;
     }
}

最後に、これはおそらく OP の質問ではないことに気付きましたが、管理ページ名を探している場合は、 global を使用してください$pagenow

于 2011-09-02T20:57:57.013 に答える
2

WordPressループ内:

if ( have_posts() ) : while ( have_posts() ) : the_post();
/******************************************/
echo get_the_title();
/******************************************/
endwhile; endif;

これにより、現在のページのタイトルが表示されます。

参考までに:get_the_title()

于 2013-12-19T08:03:41.463 に答える
1

これが私のバージョンです:

$title = ucwords(str_replace('-', ' ', get_query_var('pagename')));

get_query_var('pagename') はページスラッグを私に与えていました。したがって、上記はすべてのダッシュを置き換え、各単語の最初の文字を大文字にします。これにより、実際にタイトルとして使用できます。

于 2014-02-07T16:09:02.133 に答える
0

WordPress Codecでこの関数を見つけました。

質問を受ける

のラッパーです$wp_query->get_queried_object

この投稿は私を正しい方向に導きましたが、この更新が必要なようです.

于 2012-05-23T15:12:27.217 に答える