アドバンストカスタムフィールドを使用しているため、クライアントは自分のコンテンツを簡単に管理できます。
私のすべての私の子供と親ページで、私は同じヘッダー画像とサイドバー情報を持ちたいです。
私は "Parent Page#1"と "Parent Page#2"に異なる情報を持たせたいのですが、これはクライアントのAdvanced Custom Fieldsで制御されます。
今のところcleintはすべての親と子ページに情報を手動で記入するために行きます - 私はそれが親ページだけに記入されることを望む。子ページを作成すると、その親ページから情報が取得されます。
親ページ#1
親ページ#2
だからここに私の質問です。
私の "親ページテンプレート"で、私は画像を生成するために以下を使います:
<img src="<?php the_field('header_image'); ?>">
それでは、どのようにして私の "子ページテンプレート"で子ページの親ページから "header-image"フィールドを取得するのでしょうか。
あなたのループでは、あなたは$post->post_parent
で親ページのidにアクセスすることができます。
この値を2番目のパラメータとして渡すだけです。
<img src="<?php the_field('header_image', $post->post_parent ); ?>">
テンプレートファイルがインクルードされるまでに、ページのクエリは既に実行されており、$ 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' );
}
?>
(注:コードは十分にテストされていません。)
どうですか?
<img src="<?php $parent_header_image = get_post_meta($post->post_parent, 'header_image', true); echo $parent_header_image;?>">
私はあなたの設定を持っていません、明らかに、本当にこれをテストすることはできません、しかしそれは正しいようです。これはフロントエンドテンプレートの親データを表示するだけで、子ページの管理画面にフィールドが表示されたり入力されたりすることはありません。