webentwicklung-frage-antwort-db.com.de

Erweiterte benutzerdefinierte Felder - Benutzerdefinierte Felder von der übergeordneten Seite abrufen

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

  • Untergeordnete Seite 1 - Soll benutzerdefinierte Feldwerte von "Übergeordnete Seite 1" abrufen
  • Untergeordnete Seite 2 - Ruft benutzerdefinierte Feldwerte von "Übergeordnete Seite 1" ab.
  • Untergeordnete Seite 3 - Ruft benutzerdefinierte Feldwerte von "Übergeordnete Seite 1" ab.

Übergeordnete Seite # 2

  • Untergeordnete Seite 1 - Ruft benutzerdefinierte Feldwerte von "Übergeordnete Seite 2" ab.
  • Untergeordnete Seite 2 - Ruft benutzerdefinierte Feldwerte von "Übergeordnete Seite 2" ab.
  • Untergeordnete Seite 3 - Ruft benutzerdefinierte Feldwerte von "Übergeordnete Seite 2" ab.

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?

5

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 ); ?>">
8
RRikesh

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.)

1

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.

1
Angelique