web-dev-qa-db-ja.com

高度なカスタムフィールド - 親ページからカスタムフィールドを取得

アドバンストカスタムフィールドを使用しているため、クライアントは自分のコンテンツを簡単に管理できます。

私のすべての私の子供と親ページで、私は同じヘッダー画像とサイドバー情報を持ちたいです。

私は "Parent Page#1"と "Parent Page#2"に異なる情報を持たせたいのですが、これはクライアントのAdvanced Custom Fieldsで制御されます。

今のところcleintはすべての親と子ページに情報を手動で記入するために行きます - 私はそれが親ページだけに記入されることを望む。子ページを作成すると、その親ページから情報が取得されます。

親ページ#1

  • 子ページ#1 - 「親ページ1」からカスタムフィールド値を取得する必要があります
  • 子ページ#2 - 「親ページ1」からカスタムフィールド値を取得する必要がある
  • 子ページ#3 - 「親ページ1」からカスタムフィールド値を取得する

親ページ#2

  • 子ページ#1 - 「親ページ2」からカスタムフィールド値を取得する必要がある
  • 子ページ#2 - 「親ページ2」からカスタムフィールド値を取得する必要がある
  • 子ページ#3 - 「親ページ2」からカスタムフィールド値を取得する必要がある

だからここに私の質問です。

私の "親ページテンプレート"で、私は画像を生成するために以下を使います:

<img src="<?php the_field('header_image'); ?>">

それでは、どのようにして私の "子ページテンプレート"で子ページの親ページから "header-image"フィールドを取得するのでしょうか。

5

あなたのループでは、あなたは$post->post_parentで親ページのidにアクセスすることができます。

この値を2番目のパラメータとして渡すだけです。

<img src="<?php the_field('header_image', $post->post_parent ); ?>">
8
RRikesh

テンプレートファイルがインクルードされるまでに、ページのクエリは既に実行されており、$ postグローバル変数にはWP_Postオブジェクトが含まれています。これは$postのダンプの例です:

WP_Post::__set_state(array(
   'ID' => 3440,
   'post_author' => '1',
   'post_date' => '2013-08-19 13:06:04',
   'post_date_gmt' => '2013-08-19 13:06:04',
   'post_content' => '',
   'post_title' => 'Models',
   'post_excerpt' => '',
   'post_status' => 'publish',
   'comment_status' => 'open',
   'ping_status' => 'closed',
   'post_password' => '',
   'post_name' => 'models',
   'to_ping' => '',
   'pinged' => '',
   'post_modified' => '2013-08-23 14:32:57',
   'post_modified_gmt' => '2013-08-23 14:32:57',
   'post_content_filtered' => '',
   'post_parent' => 3442,
   'guid' => 'http://charlesclarkson.com/?page_id=3440',
   'menu_order' => 0,
   'post_type' => 'page',
   'post_mime_type' => '',
   'comment_count' => '0',
   'filter' => 'raw',
   'format_content' => NULL,
))

リストからわかるように、このオブジェクトにはpost_parentという名前のプロパティがあります。アクセスするには$post->post_parentを使用してください。最上位ページの投稿の親は'0'に設定されています。

ACFのthe_field() によると、投稿IDを関数に渡すための2番目のパラメータがあります。

あなたのページテンプレートのコードが$postでうまくいかないと仮定します。

<img src="<?php the_child_or_parent_image_src(); ?>">

<?php
function the_child_or_parent_image_src() {
    global $post;

    if ( $post->post_parent )
        the_field( 'header_image',  $post->post_parent );

    the_field( 'header_image' );
}
?>

(注:コードは十分にテストされていません。)

1

どうですか?

<img src="<?php $parent_header_image = get_post_meta($post->post_parent, 'header_image', true); echo $parent_header_image;?>">

私はあなたの設定を持っていません、明らかに、本当にこれをテストすることはできません、しかしそれは正しいようです。これはフロントエンドテンプレートの親データを表示するだけで、子ページの管理画面にフィールドが表示されたり入力されたりすることはありません。

1
Angelique