Mostrar imágenes destacadas de tipos de publicación personalizados en la plantilla de inicio
Estoy trabajando con underscores intentando construir una plantilla por mi cuenta.
He construido una plantilla de página de inicio y también un archivo single-post para los tipos de publicación personalizados.
Lo que intento conseguir es mostrar en la página de inicio una especie de galería con las imágenes destacadas de cada tipo de publicación personalizado junto con su título y etiquetas.
He intentado diferentes formas, pensé que sería algo con wp_get_archives
pero aún no lo he conseguido.
Si tienen algunas sugerencias sería genial.
¡Gracias!
Here's a solution example to help you:
<?php
// Get your custom post type posts
$args = array(
'post_type' => 'your_custom_post_type', // Replace with your CPT name
'posts_per_page' => -1,
'post_status' => 'publish'
);
$custom_query = new WP_Query($args);
if ($custom_query->have_posts()) :
echo '<div class="gallery-container">';
while ($custom_query->have_posts()) : $custom_query->the_post();
// Check if post has featured image
if (has_post_thumbnail()) :
echo '<div class="gallery-item">';
// Display featured image
echo '<a href="' . esc_url(get_permalink()) . '">';
the_post_thumbnail('medium', array(
'alt' => get_the_title(),
'title' => get_the_title()
));
echo '</a>';
// Display title
echo '<h3>' . get_the_title() . '</h3>';
// Display tags
$tags = get_the_tags();
if ($tags) :
echo '<div class="post-tags">';
foreach($tags as $tag) :
echo '<span class="tag">' . $tag->name . '</span>';
endforeach;
echo '</div>';
endif;
echo '</div>';
endif;
endwhile;
echo '</div>';
wp_reset_postdata();
else :
echo '<p>No se encontraron publicaciones.</p>';
endif;
?>
Usar wp_get_archives
devolverá una plantilla predefinida para los resultados. Necesitas tu propia consulta personalizada y plantilla para hacer eso. Como no sé exactamente lo que estás buscando, te sugiero un código básico para tu situación:
// Obtener una lista de categorías
$terms = get_terms(array('taxonomy' => 'category'));
// Ejecutar una consulta para cada categoría
foreach ($terms as $term){
$args = array(
'post_type' => 'custom_type',
'posts_per_page' => '1',
'order_by' => 'date',
'order' => 'ASC',
'cat' => $term->ID
);
$new_query = new WP_Query ($args);
if ($new_query->have_posts()) {
while($new_query->have_posts()){
$new_query->the_post();
// Título del post
the_title();
// Imagen destacada del post
the_post_thumbnail('thumbnail');
}
}
wp_reset_postdata();
}
Esto listará 1 post de cada categoría y mostrará la imagen destacada y su título. Sin embargo, generará muchas consultas si tienes muchas categorías (como 50 o más). Te sugiero usarlo con un plugin de caché.
También puedes obtener una lista de posts y mostrarlos en un escaparate, junto con el nombre de su categoría:
$args = array(
'post_type' => 'custom_type', // Tu tipo de post personalizado
'posts_per_page' => '8', // Cambia el número según lo que necesites
'order_by' => 'date', // Ordenamiento opcional
'order' => 'ASC',
);
$new_query = new WP_Query ($args);
if ($new_query->have_posts()) {
while($new_query->have_posts()){
$new_query->the_post();
the_title();
the_post_thumbnail('thumbnail');
// Obtener una lista de categorías del post
$categories = get_the_category($post->ID);
foreach ($categories as $category) {
echo $category->name;
}
}
}
wp_reset_postdata();

Puedes utilizar el loop de WordPress que está disponible en cualquier tema. Aquí está el fragmento de código básico. Copia esto en el archivo de tu página de inicio y comprueba si el resultado es el esperado:
<?php if( have_posts() ) : ?>
<?php while (have_posts()) : the_post(); ?>
<div class="blog">
<h1><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></h1>
<hr />
<div class="text-box">
<?php
if( has_post_thumbnail() ) {
echo '<div style="float:left;">';
the_post_thumbnail('thumbnail');
echo '</div>';
}
?>
</div>
</div>
<?php endwhile; ?>
<?php endif; ?>
Es el código de mi tema hijo.
