Alguma ideia de como publicar um post do WP que inclua campos de relacionamento do ACF?
O iFrame é minha melhor opção?
Alguma ideia de como publicar um post do WP que inclua campos de relacionamento do ACF?
O iFrame é minha melhor opção?
Olá Richard,
Quase nunca
E não neste caso.
Você poderia elaborar um pouco mais sobre a necessidade aqui e também o que já tentou até agora?
Como o título do seu tópico indica, você pode usar o filtro discourse_publish_format_html para alterar o HTML de um post antes de enviá-lo ao Discourse. Também há alguns bons exemplos sobre como usar campos de relacionamento do ACF na documentação do ACF. Esses podem ser aplicados junto com o filtro discourse_publish_format_html.
Tenho dois tipos de post personalizado (CPT): Memes e Pessoas. Cada um possui um campo de relacionamento do ACF chamado meme_person. Um meme pode ter várias pessoas relacionadas e o meme também tem um campo de texto para comentários. O nome de cada pessoa é o título do post de Pessoas.
Quero exibir a imagem do meme no Discourse, seguida pelo comentário e uma lista das pessoas relacionadas.
Esta é minha tentativa atual, que ainda não testei, pois minha linha foreach é um palpite.
Este é o formato correto?
// ao publicar um post no Discourse
function rs_custom_publish_format_html( $output, $post_id ) {
$post = get_post( $post_id );
$type = get_post_type($post_id);
// se houver imagem destacada, use-a
if ( has_post_thumbnail( $post_id ) ) {
$image = "{thumbnail}<br><br>";
} else {
$image = "";
}
// se o post for um meme, obtenha as informações do campo personalizado
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>Originalmente publicado em: {blogurl}</small><br><br>
<?php echo $image ?>
<?php echo $comment ?><br>
<?php echo $people ?>
{excerpt}
<?php
$output = ob_get_clean();
return $output;
}
// caso contrário, retorne
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 );
Desculpe pela minha lentidão, mas não tenho certeza se você está pedindo para revisar todo o seu código ou apenas o uso do filtro Discourse. É o formato correto no sentido de que o filtro espera que você modifique a $output e use as tags de template para interpolar valores. Para mais informações sobre isso, veja este tópico:
Obrigado. Esse tópico afirma: O modelo possui as seguintes tags de modelo disponíveis: {excerpt}, {blogurl}, {author}, {thumbnail}, {featuredimage}
Na primeira leitura, achei que esses fossem os únicos elementos que poderiam ser passados, por isso originalmente perguntei sobre o iFrame. Alguns outros tópicos sugeriram que a capacidade de pesquisar por outros campos de metadados usando o ID do Post agora está disponível. (O que talvez devesse ser mencionado no tópico de personalização do modelo)
Sua resposta original a este tópico confirmou a capacidade de pesquisar em campos de relacionamento e você perguntou o que eu já tentei.
O código que enviei é o que tenho até agora, e eu me perguntava se você tem alguma insight sobre a linha foreach, já que essa é a única parte da pesquisa em campo de relacionamento que me deixa travado. Se não, procurarei em outros lugares e retornarei aqui com um comentário.
Abraços.
Para quem deseja expandir um campo de relacionamento do ACF, aqui está o que finalmente funcionou quando o CPT que estou enviando para o Discourse se chama memes, que inclui um campo de relacionamento (como objeto) chamado meme_person que vincula a outro CPT chamado people.
function rs_custom_publish_format_html( $output, $post_id ) {
$post = get_post( $post_id );
$type = get_post_type($post_id);
// se a imagem destacada estiver presente, use-a
if ( has_post_thumbnail( $post_id ) ) {
$image = "{thumbnail}<br><br>";
} else {
$image = "";
}
// se o post for um meme, obtenha as informações do campo personalizado
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>Originalmente publicado em: {blogurl}</small><br><br>
<?php echo $image ?>
<?php echo $comment ?><br>
<?php echo $peopleout ?>
{excerpt}
<?php
$output = ob_get_clean();
return $output;
}
// caso contrário, retorne
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 );