Campo Relazione ACF in discourse_publish_format_html

Hai qualche idea su come pubblicare un post di WP che includa campi di relazione ACF?

L’iFrame è la soluzione migliore?

Ciao Richard,

Quasi mai :wink: E non in questo caso.

Potresti spiegare un po’ meglio la necessità qui e anche cosa hai già provato?

Come indicato nel titolo del tuo argomento, puoi utilizzare il filtro discourse_publish_format_html per modificare l’HTML di un post prima che venga inviato a Discourse. Ci sono anche alcuni ottimi esempi su come utilizzare i campi di relazione ACF nella documentazione di ACF. Questi potrebbero essere applicati insieme al filtro discourse_publish_format_html.

Ho due CPT: Memes e People. Ognuno ha un campo di relazione ACF chiamato meme_person. Un meme può avere diverse persone correlate e il meme ha anche un campo di testo per i commenti. Il nome di ogni persona è il titolo del post People.

Voglio mostrare l’immagine del meme su Discourse, seguita dal commento e da un elenco delle persone correlate.

Ecco il mio tentativo attuale, che non ho ancora testato perché la mia riga foreach è una supposizione a caso.

È questo il formato corretto?

// quando pubblichi un post su Discourse

function rs_custom_publish_format_html( $output, $post_id ) {

	$post = get_post( $post_id );
	$type = get_post_type($post_id);
	
	// se è presente l'immagine in evidenza, usala
	if ( has_post_thumbnail( $post_id ) ) {
		$image = "{thumbnail}<br><br>";
	} else {
		$image = "";
	}

    // se il post è un meme, ottieni le informazioni dal campo personalizzato
    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 $people ):
				$title = get_the_title( $people->ID );
				$people .= $title ? $title . ', ' : '';
			endforeach;
		endif;

        ob_start();
  
        <small>Originariamente pubblicato su: {blogurl}</small><br><br>
        <?php echo $image ?>
        <?php echo $comment ?><br>
        <?php echo $people ?>
        {excerpt}
	  
        <?php 
        $output = ob_get_clean();
        
        return $output;
    }
      
    // altrimenti restituisci
    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  );

Scusa se sono un po’ lento, ma non sono sicuro se tu mi stia chiedendo di rivedere tutto il tuo codice o solo l’uso del filtro Discourse. Il formato è corretto nel senso che il filtro si aspetta che tu modifichi $output e utilizzi i tag del template per interpolare i valori. Per ulteriori informazioni su questo, consulta questo argomento:

Grazie. Quel argomento afferma: Il template ha a disposizione i seguenti tag template: {excerpt}, {blogurl}, {author}, {thumbnail}, {featuredimage}

Alla prima lettura, ho pensato che questi fossero gli unici elementi che potevano essere passati, ed è per questo che inizialmente ho chiesto dell’iFrame. Alcuni altri thread suggerivano che la possibilità di cercare per ID del Post per altri campi meta fosse ora disponibile. (Il che forse dovrebbe essere menzionato nel thread di personalizzazione del template)

La tua risposta originale a questo thread ha confermato la possibilità di cercare nei campi di relazione e hai chiesto cosa avessi già provato.

Il codice che ho caricato è quello che ho finora, e mi chiedevo se avessi qualche osservazione sulla riga foreach, dato che è l’unica parte della ricerca nei campi di relazione che mi lascia perplesso. Se non è così, cercherò altrove e farò un aggiornamento qui.

Ciao.

Per chiunque voglia espandere un campo di relazione ACF, ecco cosa ha funzionato alla fine quando il CPT che invio a Discourse si chiama memes e include un campo di relazione (come oggetto) chiamato meme_person che collega a un altro CPT chiamato people

function rs_custom_publish_format_html( $output, $post_id ) {

	$post = get_post( $post_id );
	$type = get_post_type($post_id);
	
	// se è presente un'immagine in evidenza, usala
	if ( has_post_thumbnail( $post_id ) ) {
		$image = "{thumbnail}<br><br>";
	} else {
		$image = "";
	}

    // se il post è un meme, ottieni le informazioni del campo personalizzato
    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>Originariamente pubblicato su: {blogurl}</small><br><br>
        <?php echo $image ?>
        <?php echo $comment ?><br>
        <?php echo $peopleout ?>

        {excerpt}
	  
        <?php 
        $output = ob_get_clean();
        
        return $output;
    }
  
      
    // altrimenti restituisci
    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  );