web-dev-qa-db-ja.com

Get_post_metaが投稿ページで機能しないのはなぜですか?

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 );
4
Milo

ホームページ(これはブログページであればアーカイブページにも適用されます)は投稿でもページでもないので投稿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を返します。

2
Pieter Goosen

get_post_meta()を使うためには、投稿IDが必要です。これらはあなたのオプションです:

  1. 投稿IDを手動で設定する
  2. コードをループ内で実行し、get_the_ID()通常 loop.php
  3. 1ページでコードを実行するか、通常は page.php または single.php に投稿してください

TwentyFifteenテーマを使用して答えを拡大する:

  1. 開く index.php
  2. while ( have_posts() ) : the_post();で始まるループコードを見つけます。
  3. ステップ2のコードの後に​​コードを挿入してください、$meta = get_post_meta( get_the_ID() );
0
Scriptonomy