it-swarm.com.de

Zeigen Sie den Inhalt von post_object mit dem Plugin "Erweiterte benutzerdefinierte Felder" an

Es fällt mir schwer herauszufinden, was mit diesem Code nicht stimmt.

Was ich versuche zu tun: Einrichten eines benutzerdefinierten Feldes in Admin mit dem ACF-Plugin, um in einer Meta-Box auf allen Seiten eine Liste von Testimonials aufzulisten (Custom-Post-Type). Aus dem Dropdown-Menü kann der Kunde ein Testimonial auswählen, das auf dieser bestimmten Seite angezeigt wird.

Ich verwende eine leicht modifizierte Version von Twentytwelve Theme und dies ist der Code, den ich in meiner front_page-Vorlage verwende.

Der Code:

<?php $featured_testimonial = get_field('testimonial', $post_object->ID); ?>
    <?php foreach ($featured_testimonial as $post_object): ?>
            <a href="<?php echo get_permalink($post_object->ID); ?>">
                <p class="descr"><?php echo get_the_title($post_object->ID) ?></p>
            </a>
    <?php endforeach; ?> 

Das Problem: Dieser Code zeigt nichts auf der Titelseite. Ich habe eine print_r( $post_object ) ausgeführt und es wurden alle Informationen in meinem Testimonial angezeigt (Titel, Datum, Inhalt usw.).

Die Lösung: In den letzten 2/3 Tagen versuche ich, eine Antwort in den ACF-Support-Foren zu erhalten. Dies ist die Antwort, die ich erhalten habe:

Das Feld post object gibt ein Post-Objekt zurück, kein HTML. Die Verwendung von the_field für ein post_object-Feld führt dazu, dass nichts angezeigt wird.

Sie müssen es als Variable speichern und dann die ID- oder post_title-Variable verwenden, um den gewünschten HTML-Code auszugeben

Habe ich die Lösung nicht verstanden oder tue ich genau das, was in der Nachricht steht und woanders liegt das Problem?

Später bearbeiten: Dies ist mein aktuelles Setup in ACF für das Testimonial-Feld:

Rules: Post Types - Page.
Field Name - Testimonial.
Field Type: Post Object.
Post type: Testimonial.
Filter from taxonomy: All.

Die "Regeln" bedeuten, dass das benutzerdefinierte Feld nur auf Seiten angezeigt wird und nur "Beitragsobjekte" aus dem benutzerdefinierten Beitragstyp "Testimonial" aufgelistet werden. In admin scheint alles in Ordnung zu sein, nur dass ich im Frontend nichts zu sehen bekomme.

Letzte Änderung: Auf Vorschlag von @ s1lv3r habe ich den Feldtyp von 'post-object' in 'relationship' geändert. Ich habe den Code auch so geändert:

<?php $posts = get_field('testimonial'); ?>
    <?php if( $posts ): ?>
    <?php foreach( $posts as $post): // variable must be called $post (IMPORTANT) ?>
        <?php setup_postdata($post); ?>
        <?php echo get_the_excerpt(); ?>... <a href="<?php the_permalink(); ?>">+More</a>
        <?php the_title(); ?>
    <?php endforeach; ?>
    <?php wp_reset_postdata(); ?>
    <?php endif; ?>

Jetzt funktioniert im Frontend alles in Ordnung. Vielen Dank an alle, die mitgeholfen haben.

3

Der Code scheint in erster Linie nicht syntaktisch falsch zu sein. Welche Art von Feldtyp verwenden Sie? Beziehung?

Auch warum überschreibst du $post_object und woher kommt es überhaupt? Dieser Teil des Codes fehlt.

Um das Feld zu erhalten, das an den aktuellen Beitrag angehängt ist (innerhalb des aktuellen Loop-/globalen $ post-Objekts, das Sie anzeigen), müssen Sie einfach get_field('testimonial') ohne den ID-Parameter verwenden.

Wenn Sie das Feld an ein anderes post_object anhängen möchten, haben Sie überprüft, ob $post_object->ID eine gültige post_id direkt vor der ersten von Ihnen geposteten Zeile enthält?

Nach neuen Informationen bearbeitet:

Ist dies ein Post-Objektfeld mit aktivierter Option "Mehrere"? In den Dokumenten ( http://www.advancedcustomfields.com/resources/field-types/post-object/ ) heißt es, dass dieses Feld nur ein Array von Post-Objekten zurückgibt, wenn die Mehrfachoption aktiviert ist. Andernfalls wird nur zurückgegeben ein einzelnes Beitragsobjekt. Dies würde bedeuten, dass Sie die foreach-Schleife in Ihrem Code nicht benötigen. In diesem Fall solltest du es so benutzen:

<?php $featured_testimonial = get_field('testimonial', $post_object->ID); ?>
            <a href="<?php echo get_permalink($featured_testimonial->ID); ?>">
                <p class="descr"><?php echo get_the_title($featured_testimonial->ID) ?></p>
            </a> 
3
s1lv3r

Das wichtigste zuerst. Haben Sie einen Wert aus Ihrem Dropdown-Menü auf der Administratorseite ausgewählt? Wenn nicht, erhalten Sie von get_field keine Ergebnisse für diese Seite.

Wenn Sie Zugriff auf Ihre Datenbank haben, stellen Sie außerdem sicher, dass Sie einen Wert für diese Seite in der Tabelle _postmeta festgelegt haben.

SELECT * FROM `wp_postmeta` WHERE `post_id` = XX

Dabei istXXIhre Seiten-ID undYY(siehe unten) die ID des Testimonials, das Sie aus der Dropdown-Liste auf der Administratorseite ausgewählt haben.

Unter den Ergebnissen sollten Sie ein paar Zeilen wie diese haben:

meta_id    post_id    meta_key        meta_value
1607       XX         testimonial     YY 
1608       XX         _testimonial    field_5177d30141f17

Wenn Sie alle richtig in der DB eingestellt haben, ist es Ihr Code, der das Problem darstellt.

0
montrealist

Dieser Code wird helfen

<?php
$featured_testimonial = get_field('testimonial', $post_object->ID); 
?>
<a href="<?php echo get_the_permalink( $featured_testimonial->ID ); ?>"><?php echo $featured_testimonial->post_title; ?></a>
0
Prashant Baldha