fix(phase1): backfill pagination, fix card stacking, unify archive render
- Backfill aksrt_render_pagination() into inc/helpers/aksrt-template-tags.php (numbered + load_more/infinite branches, \AKSRT\Settings\Settings facade) - post-card.css: drop display:block !important from base .posts-item so .posts-item.card inline-block 3-col grid wins; scope <posts> block forcing - archive-resources.php: replace hand-written .posts-row.ajaxpager + get_template_part loop with aksrt_render_post_list() + aksrt_render_pagination() Refs .specs/plans/zibll-widgets-1to1.md Phase 1 (US2/US3/US5) Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
+17
-11
@@ -159,18 +159,24 @@ $has_filter = $current_orderby !== 'date' || $current_price !== 'all' || $price_
|
||||
</nav>
|
||||
|
||||
<?php if (have_posts()) : ?>
|
||||
<div class="posts-row ajaxpager tab-pane">
|
||||
<?php
|
||||
set_query_var('aksrt_post_card_layout', 'card');
|
||||
while (have_posts()) :
|
||||
the_post();
|
||||
get_template_part('templates/parts/content', 'post-card');
|
||||
endwhile;
|
||||
set_query_var('aksrt_post_card_layout', '');
|
||||
?>
|
||||
</div>
|
||||
<?php
|
||||
$render_config = function_exists('aksrt_resolve_post_list_render_config')
|
||||
? aksrt_resolve_post_list_render_config([
|
||||
'context' => 'archive',
|
||||
'overrides' => ['mode' => 'card'],
|
||||
])
|
||||
: ['context' => 'archive', 'mode' => 'card'];
|
||||
|
||||
<?php aksrt_render_pagination(); ?>
|
||||
if (function_exists('aksrt_render_post_list')) {
|
||||
aksrt_render_post_list(null, array_merge($render_config, ['wrapper_class' => 'content-stream__list']));
|
||||
}
|
||||
if (function_exists('aksrt_render_pagination')) {
|
||||
aksrt_render_pagination(null, [
|
||||
'query_context' => 'archive',
|
||||
'render_config' => $render_config,
|
||||
]);
|
||||
}
|
||||
?>
|
||||
<?php else : ?>
|
||||
<div class="no-results">
|
||||
<p><?php esc_html_e('暂无资源。', 'aksrt'); ?></p>
|
||||
|
||||
@@ -28,8 +28,6 @@
|
||||
posts.posts-item,
|
||||
article.posts-item,
|
||||
.posts-item {
|
||||
/* Custom element <posts> is inline by default — force block layout. */
|
||||
display: block !important;
|
||||
opacity: 1 !important;
|
||||
visibility: visible !important;
|
||||
padding: 20px;
|
||||
@@ -45,6 +43,12 @@ article.posts-item,
|
||||
opacity: 1;
|
||||
}
|
||||
|
||||
/* Custom element <posts> is inline by default — force block layout here only,
|
||||
scoped so it never overrides .posts-item.card inline-block grid (Phase 1 fix). */
|
||||
posts.posts-item {
|
||||
display: block;
|
||||
}
|
||||
|
||||
.posts-item.list {
|
||||
display: block;
|
||||
width: 100%;
|
||||
|
||||
@@ -1126,6 +1126,122 @@ if (!function_exists('aksrt_render_comment_pagination')) {
|
||||
}
|
||||
}
|
||||
|
||||
// ============================================================
|
||||
// 模板标签:文章列表分页渲染
|
||||
// ============================================================
|
||||
|
||||
if (!function_exists('aksrt_render_pagination')) {
|
||||
/**
|
||||
* 渲染文章列表分页(根据后台配置选择模式)。
|
||||
*
|
||||
* Zibll 对齐:numbered = 数字分页按钮;load_more/infinite = AJAX 追加。
|
||||
*
|
||||
* @param WP_Query|null $query 可选,传入自定义查询对象;默认用主查询。
|
||||
* @param array<string,mixed> $args {
|
||||
* @type string $query_context search|archive|home|tag|category... 供 AJAX 路由解析。
|
||||
* @type array<string,mixed> $render_config 透传给 AJAX 渲染器(aksrt_resolve_post_list_render_config)。
|
||||
* }
|
||||
*/
|
||||
function aksrt_render_pagination(?WP_Query $query = null, array $args = []): void {
|
||||
$pagination_mode = class_exists('\AKSRT\Settings\Settings')
|
||||
? \AKSRT\Settings\Settings::get_post_pagination_mode()
|
||||
: 'numbered';
|
||||
|
||||
if ($pagination_mode === 'numbered') {
|
||||
global $wp_query;
|
||||
$q = $query ?? $wp_query;
|
||||
if (!($q instanceof WP_Query) || $q->max_num_pages <= 1) {
|
||||
return;
|
||||
}
|
||||
|
||||
$current_page = max(1, (int) $q->get('paged'), (int) get_query_var('paged'), (int) get_query_var('page'));
|
||||
$max_pages = (int) $q->max_num_pages;
|
||||
$links = paginate_links([
|
||||
'total' => $max_pages,
|
||||
'current' => $current_page,
|
||||
'mid_size' => 2,
|
||||
'prev_text' => '<span aria-hidden="true">‹</span>',
|
||||
'next_text' => '<span aria-hidden="true">›</span>',
|
||||
'type' => 'plain',
|
||||
]);
|
||||
|
||||
if (empty($links)) {
|
||||
return;
|
||||
}
|
||||
|
||||
echo '<div class="pagenav ajax-pag aksrt-pagination content-stream__footer-nav">';
|
||||
echo wp_kses_post($links);
|
||||
if ($max_pages > 8) {
|
||||
echo '<span class="pag-jump">';
|
||||
echo '<input type="number" class="jump-input" min="1" max="' . esc_attr((string) $max_pages) . '" value="' . esc_attr((string) $current_page) . '" data-max-pages="' . esc_attr((string) $max_pages) . '" />';
|
||||
echo '<button type="button" class="ajax-next order-ajax-next" data-jump-archive="1">' . esc_html__('跳转', 'aksrt') . '</button>';
|
||||
echo '</span>';
|
||||
}
|
||||
echo '</div>';
|
||||
return;
|
||||
}
|
||||
|
||||
// load_more / infinite 模式
|
||||
global $wp_query;
|
||||
$q = $query ?? $wp_query;
|
||||
if (!($q instanceof WP_Query)) {
|
||||
return;
|
||||
}
|
||||
$max_pages = (int) $q->max_num_pages;
|
||||
$current_page = max(1, (int) $q->get('paged'), (int) get_query_var('paged'), (int) get_query_var('page'));
|
||||
|
||||
if ($current_page >= $max_pages) {
|
||||
return;
|
||||
}
|
||||
|
||||
$query_context = '';
|
||||
if (!empty($args['query_context']) && is_string($args['query_context'])) {
|
||||
$query_context = sanitize_key($args['query_context']);
|
||||
} elseif (is_search()) {
|
||||
$query_context = 'search';
|
||||
} elseif (is_archive()) {
|
||||
$query_context = 'archive';
|
||||
}
|
||||
|
||||
$query_vars = $q->query_vars;
|
||||
if (!is_array($query_vars)) {
|
||||
$query_vars = [];
|
||||
} else {
|
||||
unset($query_vars['paged'], $query_vars['page']);
|
||||
}
|
||||
|
||||
$render_config = !empty($args['render_config']) && is_array($args['render_config'])
|
||||
? $args['render_config']
|
||||
: [];
|
||||
|
||||
$trigger_text = __('加载更多', 'aksrt');
|
||||
if (class_exists('\AKSRT\Settings\Settings')) {
|
||||
$list_settings = \AKSRT\Settings\Settings::get_post_list_style_settings();
|
||||
if (!empty($list_settings['ajax_trigger_text'])) {
|
||||
$trigger_text = (string) $list_settings['ajax_trigger_text'];
|
||||
}
|
||||
}
|
||||
?>
|
||||
<div class="text-center theme-pagination ajax-pag ajax-pagination aksrt-pagination-ajax content-stream__footer-nav"
|
||||
data-mode="<?php echo esc_attr($pagination_mode); ?>"
|
||||
data-next-page="<?php echo esc_attr((string) ($current_page + 1)); ?>"
|
||||
data-max-pages="<?php echo esc_attr((string) $max_pages); ?>"
|
||||
data-query-context="<?php echo esc_attr($query_context); ?>"
|
||||
data-query-vars="<?php echo esc_attr(wp_json_encode($query_vars)); ?>"
|
||||
data-render-config="<?php echo esc_attr(wp_json_encode($render_config)); ?>"
|
||||
data-lazyload-action="ias">
|
||||
<div class="next-page ajax-next aksrt-load-more-btn" lazyload-action="ias" role="button" tabindex="0">
|
||||
<?php echo esc_html($trigger_text); ?>
|
||||
</div>
|
||||
<div class="aksrt-loading-indicator" style="display:none;" aria-hidden="true">
|
||||
<i class="fas fa-spinner fa-spin"></i>
|
||||
<span><?php esc_html_e('加载中…', 'aksrt'); ?></span>
|
||||
</div>
|
||||
</div>
|
||||
<?php
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Auto-fill missing alt attributes on images in post content.
|
||||
*
|
||||
|
||||
Reference in New Issue
Block a user