Tengo una pregunta sobre cómo mejorar mi solución.
Para mi tarea, construyo un bloque de Gutenberg que muestra las últimas 5 publicaciones. Estas publicaciones también muestran el nombre de la categoría en la parte frontal, que tiene un estilo diferente cada una.
así que estoy usando la función get_post() para obtener todas las publicaciones, pero no hay categorías, razón por la cual también usé la función wp_get_post_categories().
Esto funciona bien, usé un foreach en un foreach para obtener mis resultados. Pero se siente un poco codificado, especialmente la verificación de si la categoría «Noticias» o «informativa» se usa definitivamente está codificada.
¿Hay una solución mejor? ¿Cómo puedo archivarlo para obtener las publicaciones con las categorías de publicaciones vinculadas?
esto fue lo mejor que puedo obtener por ahora y funciona, pero no estoy contento con esta solución.
mi código:
...
$post = get_posts(
[
'posts_per_page' => 5,
]
);
...
ob_start();
some echos for html
...
foreach ($post AS $p)
{
$category = wp_get_post_categories($p->ID);
foreach ($category AS $cat)
{
echo '<div>';
echo '<div class="blog-image">';
echo '<img alt="" content="'.get_the_post_thumbnail($p->ID).'">';
echo '</div>';
echo '<div class="blog-data">';
echo '<div class="data-top">';
if(get_cat_name((int) $cat) === 'News')
{
echo '<div class="blog-type"><span class="news">'.get_cat_name((int) $cat).'</span></div>';
}elseif (get_cat_name((int) $cat) === 'Informative')
{
echo '<div class="blog-type"><span class="informative">'.get_cat_name((int) $cat).'</span></div>';
}
echo '<h3 class="blog-title">'.$p->post_title.'</h3>';
echo '</div>';
echo '<div class="data-bottom">';
echo '<div class="blog-info">';
echo '<p class="blog-date">'.date("d F Y", strtotime( $p->post_date)).'</p>';
echo '<div class="blog-link"><a href="https://stackoverflow.com/questions/72950416/.$p->guid." >Read more</a></div> ';
echo '</div>';
echo '</div>';
echo '</div>';
echo '</div>';
}
echo '<br/>';
}
...
more echos to close all html tags
return ob_get_clean();
así es como debería verse:
.