Files
Jacek Pyziak 4d5e220b3c Add BackPRO News theme and update database schema for article tracking
- Introduced a new WordPress theme "BackPRO News" with a lightweight magazine-style design.
- Added columns for tracking retry attempts and timestamps for unpublished/generated articles in the articles table.
- Included remote service metadata fields in the sites table for better management.
- Created log files for image replacements, installer actions, OpenAI article generation, and publishing processes.
- Implemented a dashboard template for site management, including permalink settings and theme installation options.
2026-02-17 20:08:02 +01:00

95 lines
4.2 KiB
PHP

<?php
if (!defined('ABSPATH')) { exit; }
get_header();
$parents = backpro_news_parent_categories();
?>
<?php if (!empty($parents)): ?>
<div class="bp-grid">
<?php foreach ($parents as $cat): ?>
<?php
$query = new WP_Query([
'post_type' => 'post',
'posts_per_page' => 5,
'cat' => (int) $cat->term_id,
'ignore_sticky_posts' => true,
]);
if (!$query->have_posts()) {
wp_reset_postdata();
continue;
}
$query->the_post();
$lead_id = get_the_ID();
$leadCats = get_the_category();
$leadLabel = !empty($leadCats) ? $leadCats[0]->name : $cat->name;
?>
<section class="bp-section">
<div class="bp-section-head">
<h2><?php echo esc_html($cat->name); ?></h2>
<a href="<?php echo esc_url(get_category_link($cat)); ?>">Wiecej</a>
</div>
<div class="bp-section-body">
<article>
<?php if (has_post_thumbnail()): ?>
<a class="bp-lead-media" href="<?php the_permalink(); ?>" aria-label="<?php the_title_attribute(); ?>">
<?php the_post_thumbnail('large', ['class' => 'bp-lead-image']); ?>
<span class="bp-mini-label"><?php echo esc_html($leadLabel); ?></span>
</a>
<?php endif; ?>
<h3 class="bp-lead-title">
<a href="<?php the_permalink(); ?>"><?php the_title(); ?></a>
</h3>
<p class="bp-lead-excerpt">
<?php echo esc_html(wp_trim_words(get_the_excerpt(), 28)); ?>
</p>
</article>
<ul class="bp-mini-grid">
<?php while ($query->have_posts()): $query->the_post(); ?>
<?php if ((int) get_the_ID() === (int) $lead_id) { continue; } ?>
<?php
$cardCats = get_the_category();
$cardLabel = !empty($cardCats) ? $cardCats[0]->name : $cat->name;
?>
<li class="bp-mini-card">
<a class="bp-mini-media" href="<?php the_permalink(); ?>" aria-label="<?php the_title_attribute(); ?>">
<?php if (has_post_thumbnail()): ?>
<?php the_post_thumbnail('medium_large', ['class' => 'bp-mini-image']); ?>
<?php else: ?>
<span class="bp-mini-image bp-mini-placeholder"></span>
<?php endif; ?>
<span class="bp-mini-label"><?php echo esc_html($cardLabel); ?></span>
</a>
<a class="bp-mini-title" href="<?php the_permalink(); ?>"><?php the_title(); ?></a>
</li>
<?php endwhile; ?>
</ul>
</div>
</section>
<?php wp_reset_postdata(); ?>
<?php endforeach; ?>
</div>
<?php else: ?>
<div class="bp-section">
<div class="bp-section-head">
<h2>Najnowsze wpisy</h2>
</div>
<div class="bp-section-body" style="grid-template-columns:1fr;">
<ul class="bp-list">
<?php
$fallback = new WP_Query([
'post_type' => 'post',
'posts_per_page' => 10,
'ignore_sticky_posts' => true,
]);
while ($fallback->have_posts()): $fallback->the_post();
?>
<li><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></li>
<?php endwhile; wp_reset_postdata(); ?>
</ul>
</div>
</div>
<?php endif; ?>
<?php get_footer(); ?>