ブログ記事を表示するためのループを含むページテンプレートがあります。ループ内には、ブログ投稿のコンテンツを表示するテンプレート(content-custom.php)を含めるためのget_template_part('content', 'custom')
関数があります。 content-custom.php
ファイル内に現在のページIDを取得することは可能ですか?
このファイル内では templateタグ をすべて使用できます。そのため、IDを取得するには、 get_the_ID()
(または the_ID()
を使用して出力する)だけを使用します。
get_the_ID()
は現在の投稿の数値IDを取得します。パラメータはなく、現在の投稿のIDを返します。
the_ID()
は現在の投稿のID番号を表示します。パラメータもありません。
カスタムループを含むページのIDにアクセスしたい場合は、次のようにします。
あなたのページテンプレートで:
<?php
global $parent_page_id;
$parent_page_id = get_the_ID();
$paged = ( get_query_var( 'paged' ) ) ? get_query_var( 'paged' ) : 1;
$args = array( 'post_type' => 'post', 'paged' => $paged );
$temp = $wp_query;
$wp_query = null;
$wp_query = new WP_Query( $args );
$wp_query->query( $args );
?>
<?php if ( $wp_query->have_posts() ) : ?>
<?php while ( $wp_query->have_posts() ) : $wp_query->the_post(); ?>
<?php get_template_part( 'content', 'custom' ); ?>
<?php endwhile; ?>
<?php wp_reset_postdata(); ?>
<?php else : ?>
<?php get_template_part( 'no-results', 'index' ); ?>
<?php endif; ?>
そしてあなたのポストコンテンツテンプレートの中で:
...
global $parent_page_id; // now you can use parent_page_template variable
...
あなたのページテンプレートで:
<?php
$paged = ( get_query_var( 'paged' ) ) ? get_query_var( 'paged' ) : 1;
$args = array( 'post_type' => 'post', 'paged' => $paged );
$my_custom_query = new WP_Query( $args );
?>
<?php if ( $my_custom_query->have_posts() ) : ?>
<?php while ( $my_custom_query->have_posts() ) : $my_custom_query->the_post(); ?>
<?php get_template_part( 'content', 'custom' ); ?>
<?php endwhile; ?>
<?php wp_reset_postdata(); ?>
<?php else : ?>
<?php get_template_part( 'no-results', 'index' ); ?>
<?php endif; ?>
そしてあなたのポストコンテンツテンプレートの中で:
...
... $wp_query->queried_object_id; // it will contain object queried in original wp_query
...
Per この答え /あなたは get_queried_object_id()
を使うことができました。これはまだCodexにはありませんが、 get_queried_object()
に関連しています。
$page_id = get_queried_object_id();
ページIDを取得するには、グローバル投稿を使用できます。
global $ post; echo "pageid:"。$ post-> ID;
上記では投稿IDではなく現在のページIDを取得します。
解決策1: (悪い解決策)
$p = $GLOBALS['wp_the_query']->get_queried_object_id();
//$p will be your page id
注:グローバルなwp_the_queryオブジェクトを使用しないでください。
編集: もしあなたがグローバルなwp_queryオブジェクトを改ざんしていなければ、すなわちquery_posts()などを使っていなければ、helgathevikingの解決策はうまくいくでしょう。
get_queried_object_id();
or
$GLOBAL['wp_query']->get_queried_object_id();
解決策2: コメントで提案されているpassatgtのように、ループの外側にページIDを格納し、ループの内側にアクセスすることができます。テンプレートパーツファイルでそれにアクセスすることのスコープの問題は、それをグローバルに宣言することによって解決できます。
コード:
//1. in the template file befor the loop
global $myglobal_page_id;
$mygloba_page_id = get_the_ID();
//you can start the loop here
get_template_part('content', 'custom');
// 2. in the template part file
global $myglobal_page_id; //inside the loop or otherwise
//this will have your page_id
説明#解決策1:
ループ内に入ると、グローバル投稿オブジェクトは現在の投稿に設定されます。したがって、あなたがthe_ID()、get_the_ID()(これはget_post()関数を使用した)を呼び出すと、メインの投稿ではなく現在の投稿のIDを取得します。
そのため、元のクエリが含まれているため、メインのwp_the_queryオブジェクト(クエリref:wp_reset_query()のリセットに使用されるメインのクエリオブジェクトのコピー)にアクセスする必要があります。