Habt ihr Ideen, wie man einen WP-Beitrag mit ACF-Beziehungsfeldern veröffentlicht?
Ist ein iFrame meine beste Option?
Habt ihr Ideen, wie man einen WP-Beitrag mit ACF-Beziehungsfeldern veröffentlicht?
Ist ein iFrame meine beste Option?
Hey Richard,
Fast nie
Und auch nicht in diesem Fall.
Könntest du den Bedarf hier etwas genauer erläutern und auch beschreiben, was du bisher versucht hast?
Wie der Titel deines Themas bereits erwähnt, kannst du den Filter discourse_publish_format_html verwenden, um das HTML eines Beitrags zu ändern, bevor er an Discourse gesendet wird. In der ACF-Dokumentation gibt es zudem einige gute Beispiele zur Verwendung von ACF-Beziehungsfeldern. Diese könnten in Kombination mit dem Filter discourse_publish_format_html angewendet werden.
Ich habe zwei benutzerdefinierte Post-Typen (CPTs): Memes und People. Jeder verfügt über ein ACF-Beziehungsfeld namens meme_person. Ein Meme kann mehrere zugehörige Personen haben, und das Meme hat zudem ein Textfeld für Kommentare. Der Name jeder Person entspricht dem Titel des entsprechenden People-Posts.
Ich möchte das Meme-Bild auf Discourse anzeigen, gefolgt vom Kommentar und einer Liste der zugehörigen Personen.
Hier ist mein aktueller Versuch, den ich noch nicht getestet habe, da meine foreach-Zeile eher eine wilde Vermutung ist.
Ist dieses Format korrekt?
// Beim Veröffentlichen eines Beitrags auf Discourse
function rs_custom_publish_format_html( $output, $post_id ) {
$post = get_post( $post_id );
$type = get_post_type($post_id);
// Wenn ein Beitragsbild vorhanden ist, verwende es
if ( has_post_thumbnail( $post_id ) ) {
$image = "{thumbnail}<br><br>";
} else {
$image = "";
}
// Wenn der Beitrag ein Meme ist, hole die Informationen aus dem benutzerdefinierten Feld
if ( 'memes' === $type) {
$comment = get_post_meta($post->ID, '_comment', true);
$people = '';
$meme_person = get_field('meme_person');
if( $meme_person ):
foreach( $meme_person as $person ):
$title = get_the_title( $person->ID );
$people .= $title ? $title . ', ' : '';
a endforeach;
endif;
ob_start();
<small>Ursprünglich veröffentlicht auf: {blogurl}</small><br><br>
<?php echo $image ?>
<?php echo $comment ?><br>
<?php echo $people ?>
{excerpt}
<?php
$output = ob_get_clean();
return $output;
}
// Andernfalls zurückgeben
ob_start();
the_permalink( $post_id );
$output = ob_get_clean();
return $output;
}
add_filter( 'discourse_publish_format_html', 'rs_custom_publish_format_html', 10, 2 );
Entschuldigung, wenn ich etwas langsam bin, aber ich bin mir nicht ganz sicher, ob du mich bittest, deinen gesamten Code zu überprüfen oder nur die Verwendung des Discourse-Filters. Es ist das richtige Format in dem Sinne, dass der Filter erwartet, dass du die $output änderst und die Template-Tags verwendest, um Werte einzufügen. Weitere Informationen dazu findest du in diesem Thema:
Danke. In diesem Thema heißt es: Die Vorlage verfügt über folgende Vorlagen-Tags: {excerpt}, {blogurl}, {author}, {thumbnail}, {featuredimage}.
Beim ersten Lesen dachte ich, das seien die einzigen Elemente, die übergeben werden können, weshalb ich ursprünglich nach iFrame gefragt habe. Einige andere Threads deuteten darauf hin, dass die Möglichkeit, nach anderen Meta-Feldern über die Post-ID zu suchen, nun verfügbar ist. (Das sollte vielleicht im Thread zur Vorlagenanpassung erwähnt werden.)
Ihre ursprüngliche Antwort auf diesen Thread bestätigte die Möglichkeit, über Beziehungsfelder hinweg zu suchen, und Sie fragten, was ich bisher versucht habe.
Der Code, den ich hochgeladen habe, ist mein aktueller Stand. Ich habe mich gefragt, ob Sie bezüglich der Zeile mit foreach einen Hinweis haben könnten, da dies der einzige Teil der Suche über Beziehungsfelder ist, der mich ins Stocken bringt. Falls nicht, werde ich anderweitig suchen und mich hier wieder melden.
Viele Grüße.
Für alle, die ein ACF-Beziehungsfeld erweitern möchten: Hier ist die Lösung, die schließlich funktioniert hat, wenn der CPT, den ich an Discourse sende, memes heißt und ein Beziehungsfeld (als Objekt) namens meme_person enthält, das auf einen anderen CPT namens people verweist.
function rs_custom_publish_format_html( $output, $post_id ) {
$post = get_post( $post_id );
$type = get_post_type($post_id);
// Wenn ein Beitragsbild vorhanden ist, verwende es
if ( has_post_thumbnail( $post_id ) ) {
$image = "{thumbnail}<br><br>";
} else {
$image = "";
}
// Wenn der Beitrag ein Meme ist, hole die benutzerdefinierten Feldinformationen
if ( 'memes' === $post->post_type) {
$comment = get_post_meta($post->ID, 'comment', true);
$peopleout = ' ';
$persons = get_post_meta($post->ID, 'meme_person', true);
if( $persons ):
foreach( $persons as $person ):
$title = get_the_title($person);
$peopleout .= $title . ' ' ;
endforeach;
endif; ?>
<?php ob_start(); ?>
<small>Ursprünglich veröffentlicht auf: {blogurl}</small><br><br>
<?php echo $image ?>
<?php echo $comment ?><br>
<?php echo $peopleout ?>
{excerpt}
<?php
$output = ob_get_clean();
return $output;
}
// Andernfalls zurückgeben
ob_start();
the_permalink( $post_id );
$output = ob_get_clean();
return $output;
}
add_filter( 'discourse_publish_format_html', 'rs_custom_publish_format_html', 10, 2 );