Ich verwende erweiterte benutzerdefinierte Felder, um meinem Kunden die Verwaltung seiner Inhalte zu erleichtern.
Auf allen meinen Kinder- und Elternseiten möchte ich das gleiche Header-Bild und die gleichen Seitenleisteninformationen haben.
Obwohl ich möchte, dass "Parent Page # 1" und "Parent Page # 2" unterschiedliche Informationen haben und dies vom Client mit Advanced Custom Fields gesteuert wird.
Im Moment geht der Schlüssel zu jeder Eltern- und Kinderseite, um die Informationen manuell auszufüllen - ich möchte, dass sie nur auf der Elternseite ausgefüllt werden. Wenn Sie die untergeordneten Seiten erstellen, werden die Informationen von der übergeordneten Seite abgerufen.
Übergeordnete Seite # 1
Übergeordnete Seite # 2
Also hier ist meine Frage.
Auf meiner übergeordneten Seitenvorlage verwende ich Folgendes, um das Bild zu generieren:
<img src="<?php the_field('header_image'); ?>">
Wie bekomme ich auf meiner "Child page template" das Feld "header-image" von der übergeordneten Seite der untergeordneten Seite?
In Ihrer Schleife können Sie mit $post->post_parent
auf die ID der übergeordneten Seite zugreifen.
Sie müssen diesen Wert nur als zweiten Parameter übergeben:
<img src="<?php the_field('header_image', $post->post_parent ); ?>">
Zu dem Zeitpunkt, zu dem die Vorlagendatei enthalten ist, wurde die Abfrage für die Seite bereits ausgeführt und die globale Variable $ post enthält ein WP_Post-Objekt. Hier ist ein Beispiel-Dump des $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,
))
Wie Sie der Auflistung entnehmen können, enthält dieses Objekt eine Eigenschaft mit dem Namen post_parent
. Verwenden Sie $post->post_parent
, um darauf zuzugreifen. Bei Seiten der obersten Ebene ist als übergeordnetes Post-Element '0'
festgelegt.
Gemäß den ACF-Dokumenten für the_field()
gibt es einen zweiten Parameter für die Übergabe einer Beitrags-ID an die Funktion.
Angenommen, der Code in Ihrer Seitenvorlage passt nicht zu $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' );
}
?>
(Hinweis: Code ist nicht gut getestet.)
Wie wäre es mit:
<img src="<?php $parent_header_image = get_post_meta($post->post_parent, 'header_image', true); echo $parent_header_image;?>">
Ich habe Ihr Setup offensichtlich nicht, kann es also nicht wirklich testen, aber es scheint vernünftig zu sein. Beachten Sie, dass hierdurch nur Ihre übergeordneten Daten in der Front-End-Vorlage angezeigt werden und keine Felder auf dem Verwaltungsbildschirm der untergeordneten Seite angezeigt oder ausgefüllt werden.