discourse_publish_format_html의 ACF Relationship 필드

ACF 관계 필드가 포함된 WP 게시물을 게시하는 방법에 대해 어떤 아이디어가 있을까요?

iFrame이 최선의 방법일까요?

Richard님,

거의 그렇지 않습니다 :wink: 그리고 이 경우에도 마찬가지입니다.

여기서 필요한 부분이 무엇인지 좀 더 자세히 설명해 주시고, 지금까지 무엇을 시도해 보셨는지 알려 주실 수 있을까요?

토픽 제목에서 언급했듯이, 게시물이 Discourse로 전송되기 전에 HTML을 변경하려면 discourse_publish_format_html 필터를 사용할 수 있습니다. 또한 ACF 문서에는 ACF 관계 필드를 사용하는 방법에 대한 좋은 예시도 있습니다. 이 예시들을 discourse_publish_format_html 필터와 함께 적용해 볼 수 있습니다.

저는 Memes와 People이라는 두 개의 CPT(커스텀 포스트 타입)를 가지고 있습니다. 각각에는 meme_person이라는 이름의 ACF 관계 필드가 있습니다. 하나의 밈(meme)에는 여러 명의 관련 인물이 있을 수 있으며, 밈에는 댓글 텍스트 필드도 있습니다. 각 인물의 이름은 People 포스트의 제목입니다.

저는 Discourse에서 밈 이미지를 표시한 뒤, 댓글과 관련 인물 목록을 표시하고 싶습니다.

아래는 제 현재 시도한 코드입니다. foreach 줄이 제멋대로 쓴 추측이어서 테스트를 하지 않았습니다.

이 형식이 맞을까요?

// when publishing a post to Discourse

function rs_custom_publish_format_html( $output, $post_id ) {

	$post = get_post( $post_id );
	$type = get_post_type($post_id);
	
	// if featured image is present, use it
	if ( has_post_thumbnail( $post_id ) ) {
		$image = "{thumbnail}<br><br>";
	} else {
		$image = "";
	}

    // if post is a meme, get the custom field information
    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( $featured_post->ID );
				$people .= $title ?> . ', '
			<?php endforeach; ?>
			</ul>
		<?php endif; ?>

        <?php ob_start(); ?>
  
        <small>Originally published at: {blogurl}</small><br><br>
        <?php echo $image ?>
        <?php echo $comment ?><br>
        <?php echo $people ?>
        {excerpt}
	  
        <?php 
        $output = ob_get_clean();
        
        return $output;
    }
      
    // else return
    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  );

좀 둔한 질문이라 죄송하지만, 모든 코드를 검토해 달라는 건지 아니면 Discourse 필터 사용 부분만 봐 달라는 건지 정확히 모르겠습니다. 필터가 $output을 수정하고 템플릿 태그를 사용하여 값을 보간하도록 기대한다는 의미에서는 형식이 맞습니다. 자세한 내용은 이 주제를 참고해 주세요.

감사합니다. 해당 주제는 다음과 같이 명시되어 있습니다: “템플릿에는 다음 템플릿 태그가 사용할 수 있습니다: {excerpt}, {blogurl}, {author}, {thumbnail}, {featuredimage}”

처음 읽었을 때, 이것이 전달할 수 있는 유일한 요소인 줄 알고 iFrame에 대해 처음 질문하게 되었습니다. 다른 몇몇 스레드에서는 이제 Post ID로 다른 메타 필드를 검색할 수 있는 기능이 추가되었다고 제안하고 있었습니다. (이 내용은 아마 템플릿 커스터마이징 스레드에 언급되어야 할 것 같습니다)

해당 스레드에 대한 당신의 원래 답변은 관계 필드를 가로질러 검색할 수 있는 능력을 확인해 주었고, 제가 지금까지 무엇을 시도해 보았는지 물어보셨습니다.

업로드한 코드는 제가 현재까지 작성한 것이며, 관계 필드 검색 중 저를 막막하게 만드는 유일한 부분이 foreach 라인이라 이에 대해 통찰을 주실 수 있는지 궁금했습니다. 만약 그렇지 않다면, 다른 곳에서 검색한 후 여기 다시 올릴 것입니다.

감사합니다.

ACF 관계 필드를 확장하려는 분들을 위해, Discourse로 전송하는 CPT가 memes이고, 이 CPT에 people이라는 다른 CPT를 참조하는 객체 형태의 관계 필드 meme_person이 포함된 경우, 마침 작동한 방법을 공유합니다.

function rs_custom_publish_format_html( $output, $post_id ) {

	$post = get_post( $post_id );
	$type = get_post_type($post_id);
	
	// featured image가 있으면 사용
	if ( has_post_thumbnail( $post_id ) ) {
		$image = "{thumbnail}<br><br>";
	} else {
		$image = "";
	}

    // 포스트가 meme이면 커스텀 필드 정보를 가져옴
    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>Originally published at: {blogurl}</small><br><br>
        <?php echo $image ?>
        <?php echo $comment ?><br>
        <?php echo $peopleout ?>

        {excerpt}
	  
        <?php 
        $output = ob_get_clean();
        
        return $output;
    }
  
      
    // 아니면 반환
    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  );