Champ de relation ACF dans discourse_publish_format_html

Des idées sur la façon de publier un article WordPress incluant des champs de relation ACF ?

L’iFrame est-elle ma meilleure option ?

1 « J'aime »

Salut Richard,

Presque jamais :wink: Et pas dans ce cas.

Pourrais-tu préciser un peu plus ce dont tu as besoin et aussi ce que tu as déjà essayé ?

Comme l’indique le titre de ton sujet, tu peux utiliser le filtre discourse_publish_format_html pour modifier le HTML d’un article avant qu’il ne soit envoyé à Discourse. Il existe également de bons exemples sur l’utilisation des champs de relation ACF dans la documentation d’ACF. Ceux-ci pourraient être appliqués conjointement avec le filtre discourse_publish_format_html.

2 « J'aime »

J’ai deux types de contenu personnalisés (CPT) : Memes et Personnes. Chacun possède un champ de relation ACF nommé meme_person. Un meme peut être lié à plusieurs personnes, et le meme contient également un champ de texte pour le commentaire. Le nom de chaque personne correspond au titre de l’article du type Personnes.

Je souhaite afficher l’image du meme sur Discourse, suivie du commentaire et d’une liste des personnes associées.

Voici ma tentative actuelle, que je n’ai pas encore testée car ma ligne foreach est une supposition hasardeuse.

Est-ce le bon format ?

// Lors de la publication d'un article sur Discourse

function rs_custom_publish_format_html( $output, $post_id ) {

	$post = get_post( $post_id );
	$type = get_post_type($post_id);
	
	// Si une image à la une est présente, l'utiliser
	if ( has_post_thumbnail( $post_id ) ) {
		$image = "{thumbnail}<br><br>";
	} else {
		$image = "";
	}

    // Si l'article est un meme, récupérer les informations du champ personnalisé
    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_id ):
				$title = get_the_title( $person_id );
				$people .= $title ? $title . ', ' : '';
			a endforeach;
		endif;

        ob_start();
  
        <small>Publié à l'origine sur : {blogurl}</small><br><br>
        <?php echo $image ?>
        <?php echo $comment ?><br>
        <?php echo $people ?>
        {excerpt}
	  
        <?php 
        $output = ob_get_clean();
        
        return $output;
    }
      
    // Sinon, retourner par défaut
    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  );
1 « J'aime »

Désolé d’être lent, mais je ne suis pas tout à fait sûr de savoir si vous me demandez de réviser tout votre code ou seulement l’utilisation du filtre Discourse. C’est le bon format dans le sens où le filtre s’attend à ce que vous modifiiez $output et que vous utilisiez les balises de modèle pour interpoler les valeurs. Pour plus d’informations à ce sujet, consultez ce sujet :

2 « J'aime »

Merci. Ce sujet indique : Le modèle dispose des balises de modèle suivantes : {excerpt}, {blogurl}, {author}, {thumbnail}, {featuredimage}

À première lecture, j’ai cru que ce n’étaient que les seuls éléments pouvant être transmis, ce qui explique pourquoi j’avais initialement posé la question sur l’iFrame. D’autres discussions ont suggéré que la possibilité de rechercher par ID de publication pour d’autres champs méta est désormais disponible. (Ce qui devrait peut-être être mentionné dans le fil de personnalisation des modèles)

Votre réponse initiale à ce fil a confirmé la possibilité de rechercher dans les champs de relation et vous m’avez demandé ce que j’avais essayé jusqu’à présent.

Le code que j’ai téléchargé est ce que j’ai pour l’instant, et je me demandais si vous aviez un éclairage sur la ligne foreach puisque c’est la seule partie de la recherche dans les champs de relation qui me bloque. Sinon, je chercherai ailleurs et reviendrai ici.

Salutations.

1 « J'aime »

Pour ceux qui souhaitent étendre un champ de relation ACF, voici ce qui a finalement fonctionné lorsque le CPT que j’envoie à Discourse s’appelle memes et inclut un champ de relation (sous forme d’objet) nommé meme_person qui lie à un autre CPT appelé people.

function rs_custom_publish_format_html( $output, $post_id ) {

	$post = get_post( $post_id );
	$type = get_post_type($post_id);
	
	// Si une image à la une est présente, l'utiliser
	if ( has_post_thumbnail( $post_id ) ) {
		$image = "{thumbnail}<br><br>";
	} else {
		$image = "";
	}

    // Si le message est un meme, récupérer les informations du champ personnalisé
    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>Publié à l'origine sur : {blogurl}</small><br><br>
        <?php echo $image ?>
        <?php echo $comment ?><br>
        <?php echo $peopleout ?>

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

3 « J'aime »

This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.