¿Tienes alguna idea sobre cómo publicar una entrada de WP que incluya campos de relación de ACF?
¿Es el iFrame mi mejor opción?
¿Tienes alguna idea sobre cómo publicar una entrada de WP que incluya campos de relación de ACF?
¿Es el iFrame mi mejor opción?
Hola Richard,
Casi nunca
Y no en este caso.
¿Podrías explicarnos un poco más la necesidad aquí y también qué has intentado hasta ahora?
Como indica el título de tu tema, puedes usar el filtro discourse_publish_format_html para modificar el HTML de una entrada antes de que se envíe a Discourse. También hay algunos buenos ejemplos sobre cómo usar los campos de relación de ACF en la documentación de ACF. Estos podrían aplicarse junto con el filtro discourse_publish_format_html.
Tengo dos tipos de contenido personalizado (CPT): Memes y Personas. Cada uno tiene un campo de relación de ACF llamado meme_person. Un meme puede tener varias personas relacionadas, y el meme también tiene un campo de texto para comentarios. El nombre de cada persona es el título de la entrada de Personas.
Quiero mostrar la imagen del meme en Discourse, seguida del comentario y una lista de las personas relacionadas.
Esta es mi intento actual, que no he probado porque mi línea foreach es una suposición totalmente a ciegas.
¿Es este el formato correcto?
// al publicar una entrada en Discourse
function rs_custom_publish_format_html( $output, $post_id ) {
$post = get_post( $post_id );
$type = get_post_type($post_id);
// si hay una imagen destacada, usarla
if ( has_post_thumbnail( $post_id ) ) {
$image = "{thumbnail}<br><br>";
} else {
$image = "";
}
// si la entrada es un meme, obtener la información del 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 $people ):
$title = get_the_title( $featured_post->ID );
$people .= $title ? ', '
<?php endforeach; ?>
</ul>
<?php endif; ?>
<?php ob_start(); ?>
<small>Originalmente publicado en: {blogurl}</small><br><br>
<?php echo $image ?>
<?php echo $comment ?><br>
<?php echo $people ?>
{excerpt}
<?php
$output = ob_get_clean();
return $output;
}
// si no, devolver
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 );
Perdona si soy lento, pero no estoy muy seguro de si me estás pidiendo que revise todo tu código o solo el uso del filtro de Discourse. Es el formato correcto en el sentido de que el filtro espera que modifiques la $output y utilices las etiquetas de plantilla para interpolar valores. Para más información sobre esto, consulta este tema:
Gracias. Ese tema indica: La plantilla tiene las siguientes etiquetas de plantilla disponibles: {excerpt}, {blogurl}, {author}, {thumbnail}, {featuredimage}.
A primera vista, pensé que esos eran los únicos elementos que se podían pasar, por lo que originalmente pregunté sobre iFrame. Otros hilos sugirieron que ahora está disponible la capacidad de buscar por ID de publicación para otros campos de metadatos. (Lo cual quizás debería mencionarse en el hilo de personalización de plantillas).
Tu respuesta original a este hilo confirmó la capacidad de buscar en campos de relación y preguntaste qué he probado hasta ahora.
El código que subí es lo que tengo hasta ahora, y me preguntaba si tienes alguna idea sobre la línea foreach, ya que es la única parte de la búsqueda en campos de relación que me deja atascado. Si no, buscaré en otro lugar y volveré a publicar aquí.
Saludos.
Para cualquiera que quiera expandir un campo de relación de ACF, esto es lo que finalmente funcionó cuando el CPT que estoy enviando a Discourse se llama memes, el cual incluye un campo de relación (como objeto) llamado meme_person que enlaza a otro CPT llamado people.
function rs_custom_publish_format_html( $output, $post_id ) {
$post = get_post( $post_id );
$type = get_post_type($post_id);
// si hay imagen destacada, úsala
if ( has_post_thumbnail( $post_id ) ) {
$image = "{thumbnail}<br><br>";
} else {
$image = "";
}
// si la entrada es un meme, obtén la información del 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>Publicado originalmente en: {blogurl}</small><br><br>
<?php echo $image ?>
<?php echo $comment ?><br>
<?php echo $peopleout ?>
{excerpt}
<?php
$output = ob_get_clean();
return $output;
}
// si no, devuelve
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 );