
Wharfdale
Auf meiner POSTS-Seite (normaler Posttyp) habe ich ein ACF-Beziehungsfeld eingerichtet. Darin kann ich Firmennamen auswählen, die alle unter dem Beitragstyp directory_listings stehen.
Jetzt habe ich den folgenden Code auf der Seite mit den Verzeichnislisten, und daher funktioniert die einfache Verwendung von get_field nicht, da sich diese Werte nicht auf dieser Seite befinden, sondern an anderer Stelle im POST-Typ.
Sie sind sich also nicht sicher, wie Sie die Informationen abrufen sollen.
Code auf einer der Seiten, die sich unter dem Beitragstyp DIRECTORY_LISTINGS befindet:
$posts = get_field('related_articles');
if( $posts ): ?>
<ul>
<?php foreach( $posts as $post): // variable must be called $post (IMPORTANT) ?>
<?php setup_postdata($post); ?>
<li>
<a href="https://stackoverflow.com/questions/27403089/<?php%20the_permalink();%20?>"><?php the_title(); ?></a>
</li>
<?php endforeach; ?>
</ul>
<?php wp_reset_postdata(); // IMPORTANT - reset the $post object so the rest of the page works correctly ?>
<?php endif; ?>
Beispieldiagramm, da ich nicht gut darin bin, per Text zu erklären.

Derzeit habe ich stattdessen das Beziehungsfeld auf der Firmenbearbeitungsseite (directory_listing) eingerichtet. Es funktioniert, wenn Sie Folgendes tun: 1) Verwandte Beiträge zu diesem Brancheneintrag -> Wählen Sie einen Beitrag -> Veröffentlichen -> zeigt jetzt die Liste auf der Brancheneintragsseite an. Beispiel hier: http://bit.ly/1vwydDl (Seitenende)
2) Ich möchte auf der POST-Bearbeitungsseite ein Unternehmen auswählen, in dem Beiträge erscheinen sollen. Ich kann das Feld problemlos über ACF dort ablegen, aber es dazu zu bringen, die Ergebnisse tatsächlich anzuzeigen, kann ich nicht herausfinden.

rnevius
Hintergrundinformation:
get_field() hat drei Parameter:
$field_name
: der Name des abzurufenden Feldes. zB “page_content” (erforderlich)
$post_id
: Spezifische Beitrags-ID, wo Ihr Wert eingegeben wurde. Standardmäßig die aktuelle Beitrags-ID (nicht erforderlich). Das können auch Optionen / Taxonomien / Benutzer / etc sein
$format_value
Wenn es Ihnen nur darum ginge, einen bestimmten Beitrag zu greifen (von dem Sie die ID kennen), wäre der Schlüssel der zweite Parameter ($post_id
). Es gibt nichts wirklich Magisches an ACF. Ganz einfach: die meta_value
(d. h. das Verzeichnis, mit dem der Beitrag verknüpft ist) wird zu jedem Beitrag gespeichert (angehängt an diesen Beitrag). $post_id
).
In Ihrem Fall kennen wir jedoch die ID der Beiträge, die wir abrufen möchten, nicht.
Lösung:
Wenn wir in einem einfachen Satz erklären, was Sie tun möchten, würde dieser Satz in etwa so aussehen:
Beiträge anzeigen/erhalten auf a directory_listings
(benutzerdefinierter Beitragstyp) Seite, die eine meta_value
was auf diese Seite zeigt.
Offensichtlich können Sie nicht verwenden get_field()
, weil Ihr Problem nichts mit “ein Feld bekommen” zu tun hat. Vielmehr müssen Sie “die Beiträge finden, die ein bestimmtes Feld haben”. ACF hat tolle Doku dazu.
Zum Glück für Sie wird WordPress mit einer großartigen Klasse namens a WP_Abfrageund eine ähnlich tolle Funktion namens get_posts(). Wenn wir also auf unseren obigen Satz zurückblicken und ihn in eine Funktion übersetzen, wollen wir: get_posts()
bei dem die meta_key
hat ein value
des Stroms $post_id
.
Oder genauer gesagt auf Ihre directory_listings
Seite hätten Sie die folgende Abfrage:
$related_articles = get_posts(array(
'post_type' => 'post',
'meta_query' => array(
array(
'key' => 'related_articles', // name of custom field
'value' => '"' . get_the_ID() . '"',
'compare' => 'LIKE'
)
)
));
if( $related_articles ):
foreach( $related_articles as $article ):
// Do something to display the articles. Each article is a WP_Post object.
// Example:
echo $article->post_title; // The post title
echo $article->post_excerpt; // The excerpt
echo get_the_post_thumbnail( $article->ID ); // The thumbnail
endforeach;
endif;
Wenn Sie in dieser Abfrage nach einem benutzerdefinierten Feld suchen, können Sie dies folgendermaßen tun:
<?php
$posts = get_field('related_articles');
if( $posts ): ?>
<ul>
<?php foreach( $posts as $post): // variable must be called $post (IMPORTANT) ?>
<?php setup_postdata($post); ?>
<li>
<a href="https://stackoverflow.com/questions/27403089/<?php%20the_permalink();%20?>"><?php the_title(); ?></a>
<?php the_field('your_custom_field',$post); ?>
</li>
<?php endforeach; ?>
</ul>
<?php wp_reset_postdata(); // IMPORTANT - reset the $post object so the rest of the page works correctly ?>
<?php endif; ?>
Wenn ich das richtig verstanden habe, ist das das gleiche Problem wie bei mir. In meinem Fall habe ich es vorgezogen, mit Shortcodes zu arbeiten. Verwenden [acf field="person"]
Da das Feld eine Beziehung ist, gab mir nur die ID der Person, aber ich konnte nicht auf ihre Felder zugreifen. Auf der anderen Seite verwenden [acf field="last_name", post_id=[acf field="person"]
was eine ideale Lösung wäre, funktioniert nicht, da der WordPress-Parser keine verschachtelten Shortcodes zulässt.
Deshalb habe ich mir diese sehr kleine PHP-Lösung ausgedacht:
function import_cf_from_cpt( $atts ) {
// import custom fields from other custom post types that are connected via a relationship to the calling custom post type
// shortcode: [import <field from calling CPT of type relationship> <field name from field from other CPT>]
// ex [import person last_name] --> Doe
$postID = do_shortcode("[acf field={$atts[0]}]");
// we use the first attribute to get the ID of the object
$postField = get_field($atts[1], $postID);
// next, using the ID we look for the field of the second attribute.
return $postField;
}
add_shortcode( 'import', 'import_cf_from_cpt' );
Wenn Sie dies in der Datei functions.php platzieren, können Sie den Shortcode verwenden
[import person last_name]
zum Beispiel oder jede andere Kombination, um Feldwerte aus anderen Beiträgen zu importieren.
9271500cookie-checkACF-Beziehungsfelder – get_field-Werte von anderen Beitragstypenyes
Jeder Post hat eine ID, also beim Aufrufen
get_field
in deinem foreach musst du die $post->ID mit übergeben. Ich denke, das meinst du, oder?– SBD
10. Dezember 2014 um 14:31 Uhr
Nun, das get_field erhält gerade nichts, weil das Feld „related_directories“ im Post-Typ gefunden wird, nicht im Post-Typ „directory_listings“. Also zeigt var_dump($posts) im Moment nichts/NULL an, was in Anbetracht dessen erwartet wird. Es muss in einen anderen Beitragstyp gehen, die Informationen abrufen und sie zum Beitragstyp directory_listings zurückbringen, um die Informationen auszugeben.
– Wharfdale
10. Dezember 2014 um 14:38 Uhr
Ja, also rufen Sie in der Datei, in der Sie Ihre Posts erhalten, das Beziehungsfeld auf. Dann durchlaufen Sie Ihre $posts-Variable.
<?php foreach( $posts as $post): $some_field = get_field('field_name', $post->ID); ?>
So etwas sollte funktionieren.– SBD
10. Dezember 2014 um 14:46 Uhr