get_post_meta()
がhome.php
で機能しない理由を探してください。私の読書から、私はこれがテンプレートであり、投稿やページではないことを理解しています。 " カスタムフィールドは私のブログページには表示されません "私が検索して見つけた最も近いページは「 get_post_metaフィールドが投稿ページに表示されません 」でしたが、答えが詳細に説明されていません。私はカスタムメタボックスをコーディングしました、それはfront_page.php
とすべてのカスタム投稿タイプのために働きますが、home.php
の中にはありません。私は条件付きのis_home()
を使っていますが、うまくいきますが、get_the_ID()
はうまくいかないようです、コード:
if ( is_home() ) {
// variables
$check_meta = get_post_meta( get_the_ID(), 'checkbox', true );
$header_meta = get_post_meta( get_the_ID(), 'header', true );
$textarea_meta = get_post_meta( get_the_ID(), 'textarea', true );
// condition
if ( ( $check_meta == 'yes' ) && !empty( $textarea_meta ) && !empty( $header_meta ) ) {
// code
}
}
home.php
にあるheader.php
内のget_the_ID()
がget_post_meta()
と連携しないように見えるのはなぜですか?
編集する
私がこの質問を編集して将来他の誰かを手助けすると私が思ったコメントによれば。フロントページとポストページをSettings -> Reading
に設定しています。以下はis_home()
のための私の条件付きで働いた:
$check_meta = get_post_meta( get_queried_object_id(), 'checkbox', true );
$header_meta = get_post_meta( get_queried_object_id(), 'header', true );
$textarea_meta = get_post_meta( get_queried_object_id(), 'textarea', true );
投稿ページが[設定]> [閲覧]> [フロントページの表示] で選択した静的ページの場合、get_queried_object_id()
はそのページのIDを返します。このIDを使用してメタデータを取得できます。
$check_meta = get_post_meta( get_queried_object_id(), 'checkbox', true );
$header_meta = get_post_meta( get_queried_object_id(), 'header', true );
$textarea_meta = get_post_meta( get_queried_object_id(), 'textarea', true );
ホームページ(これはブログページであればアーカイブページにも適用されます)は投稿でもページでもないので投稿IDがありません。これらは仮想ページであり、バックエンドで作成されていないため実際には存在しません。
get_the_ID()
uses get_post()
は、投稿またはページのIDを返すために$post
グローバルを使用します。ループ内では、$post
グローバルは常にthe_post()
を介してループされる現在の投稿に設定されます。
ループの外側のメインクエリでは、ループの前に$post
グローバルが自動的に設定され、クエリの最初の投稿の投稿オブジェクトを保持します。これはvar_dump( $post );
で確認できます。ループの実行後にチェックマークを付けると、グローバルの$post
はクエリの最後のポストに設定されます(the_post()
が値を変更したため)。
単一の投稿ページと実際のページでは、最初の投稿(これは常に唯一の投稿です)が照会された投稿になるので、投稿IDは常に(query_posts
を使用していない場合) 、query_posts
はこの詰め物を壊すでしょうあなたは大きな時間を過ごすでしょう)投稿やページの正しいIDに対応しています。どのアーカイブページでも、get_the_ID()
によって返される投稿IDは、ループの外で使用される場所に応じて、常にクエリの最初または最後の投稿になります。
アーカイブページは投稿やページではなく、IDも持たないため、投稿メタを持つこともできません。
つまり、要するにget_the_ID()
は常にfalse
($post
が空になる場合)、または任意の種類のアーカイブページのループ外の最初または最後の投稿のIDを返します。
get_post_meta()
を使うためには、投稿IDが必要です。これらはあなたのオプションです:
get_the_ID()
通常 loop.php TwentyFifteenテーマを使用して答えを拡大する:
while ( have_posts() ) : the_post();
で始まるループコードを見つけます。$meta = get_post_meta( get_the_ID() );