‘posts_per_category’ => 6, // Número de posts por categoria
‘show_excerpt’ => ‘true’, // Mostrar excerpt dos posts
‘image_size’ => ‘medium’, // Tamanho da imagem
‘columns’ => 3, // Número de colunas
‘show_date’ => ‘true’, // Mostrar data do post
‘show_category_title’ => ‘true’ // Mostrar título da categoria
),
$atts,
‘category_home’
);
// Se não especificou categorias, pegar todas
if (empty($atts[‘categories’])) {
$categories = get_categories(array(‘hide_empty’ => true));
} else {
$category_slugs = array_map(‘trim’, explode(‘,’, $atts[‘categories’]));
$categories = array();
foreach ($category_slugs as $slug) {
$cat = get_category_by_slug($slug);
if ($cat) {
$categories[] = $cat;
}
}
}
if (empty($categories)) {
return ‘
Nenhuma categoria encontrada.
‘;
}
$output = ‘
‘;
// CSS inline para estilização básica
$output .= ‘
‘;
foreach ($categories as $category) {
$output .= ‘
‘;
// Título da categoria
if ($atts[‘show_category_title’] === ‘true’) {
$output .= ‘
‘ . esc_html($category->name) . ‘
‘;
}
// Buscar posts da categoria
$posts = get_posts(array(
‘category’ => $category->term_id,
‘numberposts’ => intval($atts[‘posts_per_category’]),
‘post_status’ => ‘publish’,
‘meta_query’ => array(
array(
‘key’ => ‘_thumbnail_id’,
‘compare’ => ‘EXISTS’
)
)
));
if (empty($posts)) {
$output .= ‘
Nenhum post com imagem encontrado nesta categoria.
‘;
} else {
$output .= ‘
‘;
foreach ($posts as $post) {
setup_postdata($post);
$thumbnail = get_the_post_thumbnail($post->ID, $atts[‘image_size’], array(‘class’ => ‘post-image’));
$title = get_the_title($post->ID);
$permalink = get_permalink($post->ID);
$date = get_the_date(‘d/m/Y’, $post->ID);
$output .= ‘
‘;// Imagem
if ($thumbnail) {
$output .= ‘‘ . $thumbnail . ‘‘;
}
$output .= ‘
‘;
// Título
$output .= ‘
‘;
// Meta informações
if ($atts[‘show_date’] === ‘true’) {
$output .= ‘
Publicado em ‘ . esc_html($date) . ‘
‘;
}
// Excerpt
if ($atts[‘show_excerpt’] === ‘true’) {
$excerpt = get_the_excerpt($post->ID);
if ($excerpt) {
$output .= ‘
‘ . wp_trim_words($excerpt, 20, ‘…’) . ‘
‘;
}
}
$output .= ‘
‘; // post-content
$output .= ‘
‘; // post-item
}
$output .= ‘
‘; // category-posts
}
$output .= ‘
‘; // category-section
}
$output .= ‘
‘; // category-home-container
wp_reset_postdata();
return $output;
}
// Registrar o shortcode
add_shortcode(‘category_home’, ‘category_home_shortcode’);
/**
* Função auxiliar para adicionar suporte a imagens destacadas no tema (se não houver)
*/
function category_home_theme_setup() {
add_theme_support(‘post-thumbnails’);
}
add_action(‘after_setup_theme’, ‘category_home_theme_setup’);
/**
* Exemplo de uso adicional – Shortcode simplificado para uma categoria específica
*/
function single_category_showcase($atts) {
$atts = shortcode_atts(
array(
‘category’ => ”,
‘limit’ => 8,
‘columns’ => 4
),
$atts,
‘category_showcase’
);
if (empty($atts[‘category’])) {
return ‘
Por favor, especifique uma categoria.
‘;
}
return do_shortcode(‘[category_home categories=”‘ . $atts[‘category’] . ‘” posts_per_category=”‘ . $atts[‘limit’] . ‘” columns=”‘ . $atts[‘columns’] . ‘”]’);
}
add_shortcode(‘category_showcase’, ‘single_category_showcase’);
?>