From 6a9db98204effb027a1d607e58fdf0ef6f00e227 Mon Sep 17 00:00:00 2001 From: unknown Date: Sat, 11 Jul 2026 13:49:48 +0800 Subject: [PATCH] feat(post-list): align list schema with Zibll paging contract Replace the post_list.list admin contract with a dedicated schema module using Zibll keys (paging_ajax_s, paging_ajax_ias_s, ajax_trigger, ajax_nomore, list_orderby, post_list_author/time, target_blank). Runtime derives numbered/load_more/infinite from those keys and applies list orderby on main queries without legacy dual-write layers. --- assets/admin/src/pages/SiteSettings.vue | 20 +- .../src/schema/sections/post-list/list.js | 330 +++++++++++------- inc/bootstrap.php | 1 + .../class-aksrt-admin-schema-post-list.php | 99 +----- ...lass-aksrt-admin-schema-post-list-list.php | 284 +++++++++++++++ inc/classes/class-aksrt-settings.php | 2 +- .../trait-aksrt-scripts-part-1b.php | 2 +- ...ass-aksrt-settings-display-page-groups.php | 9 +- .../class-aksrt-settings-post-display.php | 185 +++++++--- 9 files changed, 652 insertions(+), 280 deletions(-) create mode 100644 inc/classes/admin/schema/post-list/class-aksrt-admin-schema-post-list-list.php diff --git a/assets/admin/src/pages/SiteSettings.vue b/assets/admin/src/pages/SiteSettings.vue index f9f170b0..b1c6ff96 100644 --- a/assets/admin/src/pages/SiteSettings.vue +++ b/assets/admin/src/pages/SiteSettings.vue @@ -41,11 +41,11 @@ - + - 数字翻页 - 加载更多 - 无限滚动 + 数字翻页 + 加载更多 + 无限滚动 @@ -53,9 +53,9 @@ - 数字翻页 - 加载更多 - 无限滚动 + 数字翻页 + 加载更多 + 无限滚动 @@ -146,7 +146,7 @@ const basic = reactive({ police_number: '', lazyload_enabled: true, lazyload_placeholder_url: '', - post_pagination_mode: 'numbered', + paging_ajax_s: '1', comment_pagination_mode: 'numbered', }) @@ -169,7 +169,7 @@ async function loadAll() { basic.police_number = d.police_number || '' basic.lazyload_enabled = d.lazyload_enabled !== false basic.lazyload_placeholder_url = d.lazyload_placeholder_url || '' - basic.post_pagination_mode = d.post_pagination_mode || 'numbered' + basic.paging_ajax_s = d.paging_ajax_s ?? '1' basic.comment_pagination_mode = d.comment_pagination_mode || 'numbered' } } catch (e) { @@ -190,7 +190,7 @@ async function handleSave() { police_number: basic.police_number, lazyload_enabled: basic.lazyload_enabled, lazyload_placeholder_url: basic.lazyload_placeholder_url, - post_pagination_mode: basic.post_pagination_mode, + paging_ajax_s: basic.paging_ajax_s, comment_pagination_mode: basic.comment_pagination_mode, } diff --git a/assets/admin/src/schema/sections/post-list/list.js b/assets/admin/src/schema/sections/post-list/list.js index d4402757..208c88dc 100644 --- a/assets/admin/src/schema/sections/post-list/list.js +++ b/assets/admin/src/schema/sections/post-list/list.js @@ -1,29 +1,31 @@ +/** + * Post list — list section (Zibll-aligned admin contract). + * Keys match PHP AKSRT_Admin_Schema_Post_List_List / Zibll option IDs. + */ + export const listSchema = { key: 'post_list.list', title: '文章列表', icon: 'fas fa-list', - description: '配置文章列表的卡片样式、元信息显示、分页方式和排序规则。', + description: '对齐 Zibll 文章列表:默认排序、置顶范围、翻页模式(数字/AJAX/自动加载)与列表显示部件。', defaults: { - post_card_style: 'thumb', - post_show_author: true, - post_show_date: true, - post_show_views: true, - post_show_category: true, - post_excerpt_length: 120, - post_pagination_mode: 'numbered', - ias_max: 3, - ajax_trigger_text: '', - ajax_nomore_text: '', - sticky_s: ['home', 'cat'], - list_badge_show: ['pay', 'tag', 'topics', 'cat'], - post_target_blank: false, - item_heading_bold: false, list_orderby: 'modified', + sticky_s: ['home', 'cat'], + target_blank: false, + item_heading_bold: false, + post_list_author: true, + post_list_time: true, list_meta_show: 'like', + list_badge_show: ['pay', 'tag', 'topics', 'cat'], + paging_ajax_s: '1', + paging_ajax_ias_s: true, + ias_max: 3, + ajax_trigger: '加载更多', + ajax_nomore: '没有更多了', + post_card_style: 'thumb', + post_excerpt_length: 120, + post_list_per_page: 12, list_show_type: 'separate', - thumb_postfirstimg_size: 'medium', - post_t_placeholder: '', - post_c_placeholder: '', list_list_style: '', list_list_img_position: 'left', list_list_scale: 70, @@ -37,122 +39,202 @@ export const listSchema = { }, groups: [ { - key: 'card', - title: '卡片样式', - icon: 'fas fa-th-large', - fields: [ - { key: 'post_card_style', label: '卡片样式', type: 'select', default: 'thumb', options: [ - { label: '标准图文', value: 'thumb' }, - { label: '紧凑卡', value: 'compact' }, - { label: '大图卡', value: 'large_thumb' }, - { label: '多图卡', value: 'multi_thumb' }, - { label: '纯文字', value: 'text' }, - { label: '有图则图文', value: 'thumb_if_has' }, - { label: '卡片模式', value: 'card' }, - ]}, - { key: 'post_excerpt_length', label: '摘要长度 (字)', type: 'number', default: 120, min: 20, max: 500 }, - ], - }, - { - key: 'meta', - title: '元信息显示', - icon: 'fas fa-info-circle', - fields: [ - { key: 'post_show_author', label: '显示作者', type: 'switch', default: true }, - { key: 'post_show_date', label: '显示日期', type: 'switch', default: true }, - { key: 'post_show_views', label: '显示浏览数', type: 'switch', default: true }, - { key: 'post_show_category', label: '显示分类', type: 'switch', default: true }, - { key: 'list_badge_show', label: '显示徽章类型', type: 'checkbox', default: ['pay', 'tag', 'topics', 'cat'], options: [ - { label: '付费', value: 'pay' }, - { label: '分类', value: 'cat' }, - { label: '专题', value: 'topics' }, - { label: '标签', value: 'tag' }, - ], help: '选择列表中显示哪些徽章类型' }, - { key: 'list_meta_show', label: '移动端优先部件', type: 'radio', default: 'like', options: [ - { label: '浏览数', value: 'view' }, - { label: '点赞数', value: 'like' }, - { label: '评论数', value: 'comm' }, - ], help: '移动端空间不足时保留显示的单一部件' }, - ], - }, - { - key: 'pagination', - title: '分页方式', - icon: 'fas fa-ellipsis-h', - fields: [ - { key: 'post_pagination_mode', label: '分页模式', type: 'radio', default: 'numbered', options: [ - { label: '数字分页', value: 'numbered' }, - { label: '加载更多', value: 'load_more' }, - { label: '无限滚动', value: 'infinite' }, - ]}, - { key: 'ias_max', label: '最大加载页数', type: 'number', default: 3, min: 0, max: 10, help: '0 = 不限' }, - { key: 'ajax_trigger_text', label: '加载更多文案', type: 'input', default: '', help: '留空使用默认"加载更多"' }, - { key: 'ajax_nomore_text', label: '没有更多文案', type: 'input', default: '', help: '留空使用默认"没有更多了"' }, - ], - }, - { - key: 'layout', - title: '布局设置', - icon: 'fas fa-columns', - fields: [ - { key: 'sticky_s', label: '置顶范围', type: 'checkbox', default: ['home', 'cat'], options: [ - { label: '首页', value: 'home' }, - { label: '分类页', value: 'cat' }, - { label: '标签页', value: 'tag' }, - { label: '专题页', value: 'topics' }, - ], help: '选择哪些页面类型显示置顶文章' }, - { key: 'post_target_blank', label: '新窗口打开', type: 'switch', default: false, help: '文章链接在新窗口打开' }, - { key: 'item_heading_bold', label: '标题加粗', type: 'switch', default: false, help: '列表文章标题使用粗体' }, - { key: 'list_show_type', label: '列表样式', type: 'radio', default: 'separate', options: [ - { label: '分隔卡片', value: 'separate' }, - { label: '无间距', value: 'no_margin' }, - ], help: '列表模式时的卡片间距样式' }, - { key: 'list_card_home', label: '首页卡片模式', type: 'switch', default: false, help: '首页列表切换为卡片模式' }, - { key: 'list_card_cat', label: '分类卡片模式', type: 'taxonomy_select', taxonomy: 'category', multiple: true, default: [], help: '选择分类,访问这些分类时使用卡片模式显示(为空则不使用)' }, - { key: 'list_card_tag', label: '标签页卡片模式', type: 'switch', default: false, help: '标签页列表切换为卡片模式' }, - { key: 'list_card_topics', label: '专题页卡片模式', type: 'switch', default: false, help: '专题页列表切换为卡片模式' }, - { key: 'list_card_author', label: '用户页卡片模式', type: 'switch', default: false, help: '用户页列表切换为卡片模式' }, - ], - }, - { - key: 'sort', - title: '默认排序', + key: 'order', + title: '默认排序与置顶', icon: 'fas fa-sort', fields: [ - { key: 'list_orderby', label: '列表默认排序', type: 'radio', default: 'modified', options: [ - { label: '更新时间', value: 'modified' }, - { label: '发布时间', value: 'date' }, - { label: '评论数', value: 'comments' }, - { label: 'WordPress 默认', value: 'default' }, - ], help: '分类/标签/归档页面的默认排序方式' }, + { + key: 'list_orderby', + label: '默认排序方式', + type: 'radio', + default: 'modified', + options: [ + { label: '发布时间', value: 'date' }, + { label: '更新时间', value: 'modified' }, + { label: 'WP默认', value: 'default' }, + ], + help: '文章列表全局默认排序(Zibll list_orderby)', + }, + { + key: 'sticky_s', + label: '显示置顶文章', + type: 'checkbox', + default: ['home', 'cat'], + options: [ + { label: '首页', value: 'home' }, + { label: '分类页', value: 'cat' }, + { label: '标签页', value: 'tag' }, + { label: '专题页', value: 'topics' }, + ], + }, ], }, { - key: 'list_option', - title: '列表模式配置', - icon: 'fas fa-list-ul', + key: 'display', + title: '列表显示', + icon: 'fas fa-eye', fields: [ - { key: 'list_list_style', label: '列表样式变体', type: 'radio', default: '', options: [ - { label: '默认', value: '' }, - { label: '样式2', value: 'style2' }, - ], help: '列表模式的样式变体' }, - { key: 'list_list_img_position', label: '缩略图位置', type: 'radio', default: 'left', options: [ - { label: '左侧', value: 'left' }, - { label: '右侧', value: 'right' }, - ], help: '列表模式缩略图靠左或靠右' }, - { key: 'list_list_scale', label: '缩略图比例 (%)', type: 'number', default: 70, min: 50, max: 200, help: '列表模式缩略图宽度百分比' }, + { key: 'target_blank', label: '新窗口打开文章', type: 'switch', default: false }, + { key: 'item_heading_bold', label: '列表标题粗体显示', type: 'switch', default: false }, + { key: 'post_list_author', label: '显示文章作者', type: 'switch', default: true }, + { + key: 'post_list_time', + label: '显示文章时间', + type: 'switch', + default: true, + help: '建议作者与时间至少开启一项', + }, + { + key: 'list_meta_show', + label: '列表小部件(移动端优先)', + type: 'radio', + default: 'like', + options: [ + { label: '阅读量', value: 'view' }, + { label: '点赞数', value: 'like' }, + { label: '评论', value: 'comm' }, + ], + }, + { + key: 'list_badge_show', + label: '列表徽章', + type: 'checkbox', + default: ['pay', 'tag', 'topics', 'cat'], + options: [ + { label: '付费', value: 'pay' }, + { label: '分类', value: 'cat' }, + { label: '专题', value: 'topics' }, + { label: '标签', value: 'tag' }, + ], + }, ], }, { - key: 'card_option', - title: '卡片模式配置', - icon: 'fas fa-th', + key: 'paging', + title: '列表翻页', + icon: 'fas fa-ellipsis-h', fields: [ - { key: 'list_card_style', label: '卡片样式变体', type: 'radio', default: '', options: [ - { label: '默认', value: '' }, - { label: '样式3', value: 'style3' }, - ], help: '卡片模式的样式变体' }, - { key: 'list_card_scale', label: '缩略图比例 (%)', type: 'number', default: 70, min: 20, max: 200, help: '卡片模式缩略图高度百分比' }, + { + key: 'paging_ajax_s', + label: '列表翻页模式', + type: 'radio', + default: '1', + options: [ + { label: 'AJAX 追加列表翻页', value: '1' }, + { label: '数字翻页按钮', value: '0' }, + ], + help: '对齐 Zibll paging_ajax_s', + }, + { + key: 'paging_ajax_ias_s', + label: 'AJAX 自动加载', + type: 'switch', + default: true, + dependsOn: { key: 'paging_ajax_s', value: '1' }, + help: '滚动到列表尽头时自动加载下一页', + }, + { + key: 'ias_max', + label: '自动加载页数', + type: 'number', + default: 3, + min: 0, + max: 10, + dependsOn: { key: 'paging_ajax_s', value: '1' }, + help: '0 表示不限制', + }, + { + key: 'ajax_trigger', + label: '加载更多文案', + type: 'input', + default: '加载更多', + dependsOn: { key: 'paging_ajax_s', value: '1' }, + }, + { + key: 'ajax_nomore', + label: '没有更多文案', + type: 'input', + default: '没有更多了', + dependsOn: { key: 'paging_ajax_s', value: '1' }, + }, + ], + }, + { + key: 'card', + title: '卡片与布局', + icon: 'fas fa-th-large', + fields: [ + { + key: 'post_card_style', + label: '列表卡片样式', + type: 'select', + default: 'thumb', + options: [ + { label: '标准图文', value: 'thumb' }, + { label: '紧凑卡', value: 'compact' }, + { label: '大图卡', value: 'large_thumb' }, + { label: '多图卡', value: 'multi_thumb' }, + { label: '纯文字', value: 'text' }, + { label: '有图则图文', value: 'thumb_if_has' }, + { label: '卡片模式', value: 'card' }, + ], + }, + { key: 'post_excerpt_length', label: '摘要长度', type: 'number', default: 120, min: 20, max: 500 }, + { key: 'post_list_per_page', label: '每页文章数', type: 'number', default: 12, min: 4, max: 48 }, + { + key: 'list_show_type', + label: '列表间距样式', + type: 'radio', + default: 'separate', + options: [ + { label: '分隔卡片', value: 'separate' }, + { label: '无间距', value: 'no_margin' }, + ], + }, + { + key: 'list_list_style', + label: '列表样式变体', + type: 'radio', + default: '', + options: [ + { label: '默认', value: '' }, + { label: '样式2', value: 'style2' }, + ], + }, + { + key: 'list_list_img_position', + label: '列表缩略图位置', + type: 'radio', + default: 'left', + options: [ + { label: '左侧', value: 'left' }, + { label: '右侧', value: 'right' }, + ], + }, + { key: 'list_list_scale', label: '列表缩略图比例 (%)', type: 'number', default: 70, min: 50, max: 200 }, + { + key: 'list_card_style', + label: '卡片样式变体', + type: 'radio', + default: '', + options: [ + { label: '默认', value: '' }, + { label: '样式3', value: 'style3' }, + ], + }, + { key: 'list_card_scale', label: '卡片缩略图比例 (%)', type: 'number', default: 70, min: 20, max: 200 }, + { key: 'list_card_home', label: '首页卡片模式', type: 'switch', default: false }, + { + key: 'list_card_cat', + label: '分类卡片模式', + type: 'taxonomy_select', + taxonomy: 'category', + multiple: true, + default: [], + }, + { key: 'list_card_tag', label: '标签页卡片模式', type: 'switch', default: false }, + { key: 'list_card_topics', label: '专题页卡片模式', type: 'switch', default: false }, + { key: 'list_card_author', label: '用户页卡片模式', type: 'switch', default: false }, ], }, ], diff --git a/inc/bootstrap.php b/inc/bootstrap.php index cef2e3ee..90a036e4 100644 --- a/inc/bootstrap.php +++ b/inc/bootstrap.php @@ -108,6 +108,7 @@ require_once AKSRT_DIR . '/inc/classes/admin/class-aksrt-admin-tools-controller. require_once AKSRT_DIR . '/inc/classes/admin/class-aksrt-admin-schema-provider.php'; require_once AKSRT_DIR . '/inc/classes/admin/schema/class-aksrt-admin-schema-global.php'; require_once AKSRT_DIR . '/inc/classes/admin/schema/class-aksrt-admin-schema-page-display.php'; +require_once AKSRT_DIR . '/inc/classes/admin/schema/post-list/class-aksrt-admin-schema-post-list-list.php'; require_once AKSRT_DIR . '/inc/classes/admin/schema/class-aksrt-admin-schema-post-list.php'; require_once AKSRT_DIR . '/inc/classes/admin/schema/class-aksrt-admin-schema-permissions.php'; require_once AKSRT_DIR . '/inc/classes/admin/schema/class-aksrt-admin-schema-users.php'; diff --git a/inc/classes/admin/schema/class-aksrt-admin-schema-post-list.php b/inc/classes/admin/schema/class-aksrt-admin-schema-post-list.php index 4e730281..3ccf4cf7 100644 --- a/inc/classes/admin/schema/class-aksrt-admin-schema-post-list.php +++ b/inc/classes/admin/schema/class-aksrt-admin-schema-post-list.php @@ -14,104 +14,7 @@ class AKSRT_Admin_Schema_Post_List { 'domain' => 'post_list', 'title' => '文章&列表', 'sections' => [ - 'list' => [ - 'key' => 'list', - 'title' => '文章列表', - 'version' => '1.0.0', - 'option_key' => 'aksrt_settings', - 'groups' => [ - ['key' => 'card', 'title' => '卡片样式', 'fields' => [ - ['key' => 'post_card_style', 'label' => '卡片样式', 'type' => 'select', 'default' => 'thumb', 'options' => [ - ['label' => '标准图文', 'value' => 'thumb'], - ['label' => '紧凑卡', 'value' => 'compact'], - ['label' => '大图卡', 'value' => 'large_thumb'], - ['label' => '多图卡', 'value' => 'multi_thumb'], - ['label' => '纯文字', 'value' => 'text'], - ['label' => '有图则图文', 'value' => 'thumb_if_has'], - ['label' => '卡片模式', 'value' => 'card'], - ]], - ['key' => 'post_excerpt_length', 'label' => '摘要长度', 'type' => 'number', 'default' => 120, 'min' => 20, 'max' => 500], - ]], - ['key' => 'meta', 'title' => '元信息显示', 'fields' => [ - ['key' => 'post_show_author', 'label' => '显示作者', 'type' => 'switch', 'default' => true], - ['key' => 'post_show_date', 'label' => '显示日期', 'type' => 'switch', 'default' => true], - ['key' => 'post_show_views', 'label' => '显示浏览数', 'type' => 'switch', 'default' => true], - ['key' => 'post_show_category', 'label' => '显示分类', 'type' => 'switch', 'default' => true], - ['key' => 'post_show_tags', 'label' => '显示标签', 'type' => 'switch', 'default' => false], - ['key' => 'post_show_comments', 'label' => '显示评论数', 'type' => 'switch', 'default' => false], - ['key' => 'post_show_likes', 'label' => '显示点赞数', 'type' => 'switch', 'default' => false], - ['key' => 'list_badge_show', 'label' => '显示徽章类型', 'type' => 'checkbox', 'default' => ['pay', 'tag', 'topics', 'cat'], 'options' => [ - ['label' => '付费', 'value' => 'pay'], - ['label' => '分类', 'value' => 'cat'], - ['label' => '专题', 'value' => 'topics'], - ['label' => '标签', 'value' => 'tag'], - ]], - ['key' => 'post_list_meta_show', 'label' => '显示元信息', 'type' => 'switch', 'default' => true], - ['key' => 'list_meta_show', 'label' => '移动端优先部件', 'type' => 'radio', 'default' => 'like', 'options' => [ - ['label' => '浏览数', 'value' => 'view'], - ['label' => '点赞数', 'value' => 'like'], - ['label' => '评论数', 'value' => 'comm'], - ], 'description' => '移动端空间不足时保留显示的单一部件'], - ]], - ['key' => 'layout', 'title' => '布局设置', 'fields' => [ - ['key' => 'post_list_columns', 'label' => '列表列数', 'type' => 'number', 'default' => 1, 'min' => 1, 'max' => 3], - ['key' => 'post_list_per_page', 'label' => '每页文章数', 'type' => 'number', 'default' => 12, 'min' => 4, 'max' => 48], - ['key' => 'sticky_s', 'label' => '置顶范围', 'type' => 'checkbox', 'default' => ['home', 'cat'], 'options' => [ - ['label' => '首页', 'value' => 'home'], - ['label' => '分类页', 'value' => 'cat'], - ['label' => '标签页', 'value' => 'tag'], - ['label' => '专题页', 'value' => 'topics'], - ]], - ['key' => 'post_target_blank', 'label' => '新窗口打开', 'type' => 'switch', 'default' => false], - ['key' => 'item_heading_bold', 'label' => '标题加粗', 'type' => 'switch', 'default' => false], - ['key' => 'list_show_type', 'label' => '列表样式', 'type' => 'radio', 'default' => 'separate', 'options' => [ - ['label' => '分隔卡片', 'value' => 'separate'], - ['label' => '无间距', 'value' => 'no_margin'], - ]], - ['key' => 'list_card_home', 'label' => '首页卡片模式', 'type' => 'switch', 'default' => false], - ['key' => 'list_card_cat', 'label' => '分类卡片模式', 'type' => 'taxonomy_select', 'taxonomy' => 'category', 'multiple' => true, 'default' => []], - ['key' => 'list_card_tag', 'label' => '标签页卡片模式', 'type' => 'switch', 'default' => false], - ['key' => 'list_card_topics', 'label' => '专题页卡片模式', 'type' => 'switch', 'default' => false], - ['key' => 'list_card_author', 'label' => '用户页卡片模式', 'type' => 'switch', 'default' => false], - ]], - ['key' => 'pagination', 'title' => '分页方式', 'fields' => [ - ['key' => 'post_pagination_mode', 'label' => '分页模式', 'type' => 'radio', 'default' => 'numbered', 'options' => [ - ['label' => '数字分页', 'value' => 'numbered'], - ['label' => '加载更多', 'value' => 'load_more'], - ['label' => '无限滚动', 'value' => 'infinite'], - ]], - ['key' => 'ias_max', 'label' => '最大加载页数', 'type' => 'number', 'default' => 3, 'min' => 0, 'max' => 10, 'description' => '0=不限'], - ['key' => 'ajax_trigger_text', 'label' => '加载更多文案', 'type' => 'input', 'default' => ''], - ['key' => 'ajax_nomore_text', 'label' => '没有更多文案', 'type' => 'input', 'default' => ''], - ]], - ['key' => 'sort', 'title' => '默认排序', 'fields' => [ - ['key' => 'list_orderby', 'label' => '列表默认排序', 'type' => 'radio', 'default' => 'modified', 'options' => [ - ['label' => '更新时间', 'value' => 'modified'], - ['label' => '发布时间', 'value' => 'date'], - ['label' => '评论数', 'value' => 'comments'], - ['label' => 'WordPress 默认', 'value' => 'default'], - ], 'help' => '分类/标签/归档页面的默认排序方式'], - ]], - ['key' => 'list_option', 'title' => '列表模式配置', 'fields' => [ - ['key' => 'list_list_style', 'label' => '列表样式变体', 'type' => 'radio', 'default' => '', 'options' => [ - ['label' => '默认', 'value' => ''], - ['label' => '样式2', 'value' => 'style2'], - ]], - ['key' => 'list_list_img_position', 'label' => '缩略图位置', 'type' => 'radio', 'default' => 'left', 'options' => [ - ['label' => '左侧', 'value' => 'left'], - ['label' => '右侧', 'value' => 'right'], - ]], - ['key' => 'list_list_scale', 'label' => '缩略图比例 (%)', 'type' => 'number', 'default' => 70, 'min' => 50, 'max' => 200], - ]], - ['key' => 'card_option', 'title' => '卡片模式配置', 'fields' => [ - ['key' => 'list_card_style', 'label' => '卡片样式变体', 'type' => 'radio', 'default' => '', 'options' => [ - ['label' => '默认', 'value' => ''], - ['label' => '样式3', 'value' => 'style3'], - ]], - ['key' => 'list_card_scale', 'label' => '缩略图比例 (%)', 'type' => 'number', 'default' => 70, 'min' => 20, 'max' => 200], - ]], - ], - ], + 'list' => AKSRT_Admin_Schema_Post_List_List::build(), 'thumb' => [ 'key' => 'thumb', 'title' => '列表缩略图', diff --git a/inc/classes/admin/schema/post-list/class-aksrt-admin-schema-post-list-list.php b/inc/classes/admin/schema/post-list/class-aksrt-admin-schema-post-list-list.php new file mode 100644 index 00000000..00b7a1a0 --- /dev/null +++ b/inc/classes/admin/schema/post-list/class-aksrt-admin-schema-post-list-list.php @@ -0,0 +1,284 @@ + 'list', + 'title' => '文章列表', + 'version' => '2.0.0', + 'option_key' => 'aksrt_settings', + 'groups' => [ + [ + 'key' => 'order', + 'title' => '默认排序与置顶', + 'fields' => [ + [ + 'key' => 'list_orderby', + 'label' => '默认排序方式', + 'type' => 'radio', + 'default' => 'modified', + 'options' => [ + ['label' => '发布时间', 'value' => 'date'], + ['label' => '更新时间', 'value' => 'modified'], + ['label' => 'WP默认', 'value' => 'default'], + ], + 'help' => '文章列表全局默认排序(对齐 Zibll list_orderby)', + ], + [ + 'key' => 'sticky_s', + 'label' => '显示置顶文章', + 'type' => 'checkbox', + 'default' => ['home', 'cat'], + 'options' => [ + ['label' => '首页', 'value' => 'home'], + ['label' => '分类页', 'value' => 'cat'], + ['label' => '标签页', 'value' => 'tag'], + ['label' => '专题页', 'value' => 'topics'], + ], + ], + ], + ], + [ + 'key' => 'display', + 'title' => '列表显示', + 'fields' => [ + [ + 'key' => 'target_blank', + 'label' => '新窗口打开文章', + 'type' => 'switch', + 'default' => false, + ], + [ + 'key' => 'item_heading_bold', + 'label' => '列表标题粗体显示', + 'type' => 'switch', + 'default' => false, + ], + [ + 'key' => 'post_list_author', + 'label' => '显示文章作者', + 'type' => 'switch', + 'default' => true, + ], + [ + 'key' => 'post_list_time', + 'label' => '显示文章时间', + 'type' => 'switch', + 'default' => true, + 'help' => '建议作者与时间至少开启一项', + ], + [ + 'key' => 'list_meta_show', + 'label' => '列表小部件(移动端优先)', + 'type' => 'radio', + 'default' => 'like', + 'options' => [ + ['label' => '阅读量', 'value' => 'view'], + ['label' => '点赞数', 'value' => 'like'], + ['label' => '评论', 'value' => 'comm'], + ], + 'help' => '移动端空间不足时始终保留的部件', + ], + [ + 'key' => 'list_badge_show', + 'label' => '列表徽章', + 'type' => 'checkbox', + 'default' => ['pay', 'tag', 'topics', 'cat'], + 'options' => [ + ['label' => '付费', 'value' => 'pay'], + ['label' => '分类', 'value' => 'cat'], + ['label' => '专题', 'value' => 'topics'], + ['label' => '标签', 'value' => 'tag'], + ], + ], + ], + ], + [ + 'key' => 'paging', + 'title' => '列表翻页', + 'fields' => [ + [ + 'key' => 'paging_ajax_s', + 'label' => '列表翻页模式', + 'type' => 'radio', + 'default' => '1', + 'options' => [ + ['label' => 'AJAX 追加列表翻页', 'value' => '1'], + ['label' => '数字翻页按钮', 'value' => '0'], + ], + 'help' => '对齐 Zibll paging_ajax_s;单页数量仍受 WP 阅读设置影响', + ], + [ + 'key' => 'paging_ajax_ias_s', + 'label' => 'AJAX 自动加载', + 'type' => 'switch', + 'default' => true, + 'dependsOn' => ['key' => 'paging_ajax_s', 'value' => '1'], + 'help' => '滚动到列表尽头时自动加载下一页(Zibll paging_ajax_ias_s)', + ], + [ + 'key' => 'ias_max', + 'label' => '自动加载页数', + 'type' => 'number', + 'default' => 3, + 'min' => 0, + 'max' => 10, + 'dependsOn' => ['key' => 'paging_ajax_s', 'value' => '1'], + 'help' => '0 表示不限制,直到加载完全部列表', + ], + [ + 'key' => 'ajax_trigger', + 'label' => '加载更多文案', + 'type' => 'input', + 'default' => '加载更多', + 'dependsOn' => ['key' => 'paging_ajax_s', 'value' => '1'], + ], + [ + 'key' => 'ajax_nomore', + 'label' => '没有更多文案', + 'type' => 'input', + 'default' => '没有更多了', + 'dependsOn' => ['key' => 'paging_ajax_s', 'value' => '1'], + ], + ], + ], + [ + 'key' => 'card', + 'title' => '卡片与布局', + 'fields' => [ + [ + 'key' => 'post_card_style', + 'label' => '列表卡片样式', + 'type' => 'select', + 'default' => 'thumb', + 'options' => [ + ['label' => '标准图文', 'value' => 'thumb'], + ['label' => '紧凑卡', 'value' => 'compact'], + ['label' => '大图卡', 'value' => 'large_thumb'], + ['label' => '多图卡', 'value' => 'multi_thumb'], + ['label' => '纯文字', 'value' => 'text'], + ['label' => '有图则图文', 'value' => 'thumb_if_has'], + ['label' => '卡片模式', 'value' => 'card'], + ], + ], + [ + 'key' => 'post_excerpt_length', + 'label' => '摘要长度', + 'type' => 'number', + 'default' => 120, + 'min' => 20, + 'max' => 500, + ], + [ + 'key' => 'post_list_per_page', + 'label' => '每页文章数', + 'type' => 'number', + 'default' => 12, + 'min' => 4, + 'max' => 48, + ], + [ + 'key' => 'list_show_type', + 'label' => '列表间距样式', + 'type' => 'radio', + 'default' => 'separate', + 'options' => [ + ['label' => '分隔卡片', 'value' => 'separate'], + ['label' => '无间距', 'value' => 'no_margin'], + ], + ], + [ + 'key' => 'list_list_style', + 'label' => '列表样式变体', + 'type' => 'radio', + 'default' => '', + 'options' => [ + ['label' => '默认', 'value' => ''], + ['label' => '样式2', 'value' => 'style2'], + ], + ], + [ + 'key' => 'list_list_img_position', + 'label' => '列表缩略图位置', + 'type' => 'radio', + 'default' => 'left', + 'options' => [ + ['label' => '左侧', 'value' => 'left'], + ['label' => '右侧', 'value' => 'right'], + ], + ], + [ + 'key' => 'list_list_scale', + 'label' => '列表缩略图比例 (%)', + 'type' => 'number', + 'default' => 70, + 'min' => 50, + 'max' => 200, + ], + [ + 'key' => 'list_card_style', + 'label' => '卡片样式变体', + 'type' => 'radio', + 'default' => '', + 'options' => [ + ['label' => '默认', 'value' => ''], + ['label' => '样式3', 'value' => 'style3'], + ], + ], + [ + 'key' => 'list_card_scale', + 'label' => '卡片缩略图比例 (%)', + 'type' => 'number', + 'default' => 70, + 'min' => 20, + 'max' => 200, + ], + [ + 'key' => 'list_card_home', + 'label' => '首页卡片模式', + 'type' => 'switch', + 'default' => false, + ], + [ + 'key' => 'list_card_cat', + 'label' => '分类卡片模式', + 'type' => 'taxonomy_select', + 'taxonomy' => 'category', + 'multiple' => true, + 'default' => [], + ], + [ + 'key' => 'list_card_tag', + 'label' => '标签页卡片模式', + 'type' => 'switch', + 'default' => false, + ], + [ + 'key' => 'list_card_topics', + 'label' => '专题页卡片模式', + 'type' => 'switch', + 'default' => false, + ], + [ + 'key' => 'list_card_author', + 'label' => '用户页卡片模式', + 'type' => 'switch', + 'default' => false, + ], + ], + ], + ], + ]; + } +} diff --git a/inc/classes/class-aksrt-settings.php b/inc/classes/class-aksrt-settings.php index 8c917b99..3ac114b3 100644 --- a/inc/classes/class-aksrt-settings.php +++ b/inc/classes/class-aksrt-settings.php @@ -470,7 +470,7 @@ class AKSRT_Settings { * Only fires when no explicit orderby is set by URL params or other hooks. */ public static function apply_list_orderby($query): void { - AKSRT_Settings_Theme_Search::apply_list_orderby($query); + AKSRT_Settings_Post_Display::apply_list_orderby($query); } /** diff --git a/inc/classes/scripts-traits/trait-aksrt-scripts-part-1b.php b/inc/classes/scripts-traits/trait-aksrt-scripts-part-1b.php index c6ecb50f..060b5ffb 100644 --- a/inc/classes/scripts-traits/trait-aksrt-scripts-part-1b.php +++ b/inc/classes/scripts-traits/trait-aksrt-scripts-part-1b.php @@ -1118,7 +1118,7 @@ trait AKSRT_Scripts_Part_1b { 'themeMode' => class_exists('AKSRT_Settings') ? AKSRT_Settings::theme_mode_js_value() : 'auto', 'debug' => defined('WP_DEBUG') && WP_DEBUG, 'debugLog' => defined('WP_DEBUG') && WP_DEBUG && defined('WP_DEBUG_LOG') && WP_DEBUG_LOG, - 'postPaginationMode' => class_exists('AKSRT_Settings') ? AKSRT_Settings::get_post_pagination_mode() : 'numbered', + 'postPaginationMode' => class_exists('AKSRT_Settings') ? AKSRT_Settings::get_post_pagination_mode() : 'load_more', 'commentPaginationMode' => class_exists('AKSRT_Settings') ? AKSRT_Settings::get_comment_pagination_mode() : 'numbered', 'homepagePostsPerPage' => function_exists('aksrt_homepage_get_tab_posts_per_page') ? aksrt_homepage_get_tab_posts_per_page() : (int) get_option('posts_per_page'), 'homepageDefaultSort' => class_exists('AKSRT_Settings') ? AKSRT_Settings::homepage_default_sort() : 'modified', diff --git a/inc/classes/settings/class-aksrt-settings-display-page-groups.php b/inc/classes/settings/class-aksrt-settings-display-page-groups.php index de492146..61e8dd2c 100644 --- a/inc/classes/settings/class-aksrt-settings-display-page-groups.php +++ b/inc/classes/settings/class-aksrt-settings-display-page-groups.php @@ -162,23 +162,26 @@ trait AKSRT_Settings_Display_Page_Groups { return [ 'list' => [ 'post_card_style' => $list['card_style'], - 'post_show_author' => $list['show_author'], + 'post_list_author' => $list['show_author'], 'post_show_date' => $list['show_date'], 'post_show_views' => $list['show_views'], 'post_show_category' => $list['show_category'], 'post_show_comments' => $list['show_comments'], 'post_show_likes' => $list['show_likes'], 'post_excerpt_length' => $list['excerpt_length'], + 'paging_ajax_s' => AKSRT_Settings_Post_Display::is_list_paging_ajax() ? '1' : '0', + 'paging_ajax_ias_s' => AKSRT_Settings_Post_Display::is_list_paging_ajax_ias(), 'post_pagination_mode' => self::get_post_pagination_mode(), 'render_mode' => $list['render_mode'], 'sticky_s' => $list['sticky_pages'], 'list_badge_show' => $list['badge_types'], - 'post_target_blank' => $list['target_blank'], + 'target_blank' => $list['target_blank'], 'item_heading_bold' => $list['heading_bold'], 'list_meta_show' => $list['mobile_meta'], 'list_show_type' => $list['list_show_type'], 'ias_max' => $list['ias_max'], - 'ajax_trigger_text' => $list['ajax_trigger_text'], + 'ajax_trigger' => $list['ajax_trigger_text'], + 'ajax_nomore' => $list['ajax_nomore_text'], 'ajax_nomore_text' => $list['ajax_nomore_text'], 'post_list_columns' => $list['columns'], 'post_list_per_page' => $list['per_page'], diff --git a/inc/classes/settings/class-aksrt-settings-post-display.php b/inc/classes/settings/class-aksrt-settings-post-display.php index b4fa505e..be55d823 100644 --- a/inc/classes/settings/class-aksrt-settings-post-display.php +++ b/inc/classes/settings/class-aksrt-settings-post-display.php @@ -11,76 +11,105 @@ class AKSRT_Settings_Post_Display { public static function get_post_list_style_settings(): array { $settings = AKSRT_Settings::get_all(); - $card_style = sanitize_key((string) ($settings['post_card_style'] ?? 'standard')); - $allowed_styles = ['standard', 'compact', 'large_thumb', 'multi_thumb', 'text', 'thumb_if_has']; + $card_style = sanitize_key((string) ($settings['post_card_style'] ?? 'thumb')); + $allowed_styles = ['thumb', 'compact', 'large_thumb', 'multi_thumb', 'text', 'thumb_if_has', 'card', 'standard']; if (!in_array($card_style, $allowed_styles, true)) { - $card_style = 'standard'; + $card_style = 'thumb'; + } + // historical alias + if ($card_style === 'standard') { + $card_style = 'thumb'; } $render_mode_map = [ - 'standard' => 'card', + 'thumb' => 'card', 'compact' => 'list', 'large_thumb' => 'list', 'multi_thumb' => 'list', 'text' => 'list', 'thumb_if_has' => 'list', + 'card' => 'card', ]; $sticky_pages_raw = $settings['sticky_s'] ?? null; if (is_array($sticky_pages_raw)) { $allowed_pages = ['home', 'cat', 'tag', 'topics']; $sticky_pages = array_values(array_intersect(array_map('sanitize_key', $sticky_pages_raw), $allowed_pages)); - } elseif (!isset($settings['post_sticky_enabled']) || !empty($settings['post_sticky_enabled'])) { - $sticky_pages = ['home', 'cat']; } else { - $sticky_pages = []; + $sticky_pages = ['home', 'cat']; } $badge_types_raw = $settings['list_badge_show'] ?? null; if (is_array($badge_types_raw)) { $allowed_types = ['pay', 'cat', 'topics', 'tag']; $badge_types = array_values(array_intersect(array_map('sanitize_key', $badge_types_raw), $allowed_types)); - } elseif (!isset($settings['post_list_badge_show']) || !empty($settings['post_list_badge_show'])) { - $badge_types = ['pay', 'cat', 'topics', 'tag']; } else { - $badge_types = []; + $badge_types = ['pay', 'cat', 'topics', 'tag']; + } + + $show_author = array_key_exists('post_list_author', $settings) + ? !empty($settings['post_list_author']) + : (!isset($settings['post_show_author']) || !empty($settings['post_show_author'])); + + $show_date = array_key_exists('post_list_time', $settings) + ? !empty($settings['post_list_time']) + : (!isset($settings['post_show_date']) || !empty($settings['post_show_date'])); + + $target_blank = array_key_exists('target_blank', $settings) + ? !empty($settings['target_blank']) + : !empty($settings['post_target_blank']); + + $ajax_trigger = ''; + if (array_key_exists('ajax_trigger', $settings)) { + $ajax_trigger = sanitize_text_field((string) $settings['ajax_trigger']); + } elseif (array_key_exists('ajax_trigger_text', $settings)) { + $ajax_trigger = sanitize_text_field((string) $settings['ajax_trigger_text']); + } + + $ajax_nomore = ''; + if (array_key_exists('ajax_nomore', $settings)) { + $ajax_nomore = sanitize_text_field((string) $settings['ajax_nomore']); + } elseif (array_key_exists('ajax_nomore_text', $settings)) { + $ajax_nomore = sanitize_text_field((string) $settings['ajax_nomore_text']); } return [ - 'card_style' => in_array(sanitize_key((string) ($settings['list_card_style'] ?? '')), ['', 'style3'], true) ? sanitize_key((string) ($settings['list_card_style'] ?? '')) : '', - 'render_mode' => $render_mode_map[$card_style] ?? 'card', - 'show_author' => !isset($settings['post_show_author']) || !empty($settings['post_show_author']), - 'show_date' => !isset($settings['post_show_date']) || !empty($settings['post_show_date']), - 'show_views' => !isset($settings['post_show_views']) || !empty($settings['post_show_views']), - 'show_category' => !isset($settings['post_show_category']) || !empty($settings['post_show_category']), - 'show_comments' => !isset($settings['post_meta_comments']) || !empty($settings['post_meta_comments']), - 'show_likes' => !isset($settings['post_meta_likes']) || !empty($settings['post_meta_likes']), - 'badge_types' => $badge_types, - 'badge_show' => !empty($badge_types), - 'sticky_pages' => $sticky_pages, - 'sticky_enabled' => !empty($sticky_pages), - 'target_blank' => !empty($settings['post_target_blank']), - 'heading_bold' => !empty($settings['item_heading_bold']), - 'mobile_meta' => in_array(sanitize_key((string) ($settings['list_meta_show'] ?? 'like')), ['view', 'like', 'comm'], true) ? sanitize_key((string) ($settings['list_meta_show'] ?? 'like')) : 'like', - 'list_show_type' => in_array(sanitize_key((string) ($settings['list_show_type'] ?? 'separate')), ['separate', 'no_margin'], true) ? sanitize_key((string) ($settings['list_show_type'] ?? 'separate')) : 'separate', - 'excerpt_length' => max(20, min(500, (int) ($settings['post_excerpt_length'] ?? 120))), - 'ias_max' => max(0, min(10, (int) ($settings['ias_max'] ?? 3))), - 'ajax_trigger_text' => sanitize_text_field((string) ($settings['ajax_trigger_text'] ?? '')), - 'ajax_nomore_text' => sanitize_text_field((string) ($settings['ajax_nomore_text'] ?? '')), - 'list_orderby' => in_array(sanitize_key((string) ($settings['list_orderby'] ?? 'modified')), ['modified', 'date', 'comments', 'default'], true) ? sanitize_key((string) ($settings['list_orderby'] ?? 'modified')) : 'modified', - 'columns' => max(1, min(3, (int) ($settings['post_list_columns'] ?? 1))), - 'per_page' => max(4, min(48, (int) ($settings['post_list_per_page'] ?? 12))), - 'list_style' => in_array(sanitize_key((string) ($settings['list_list_style'] ?? '')), ['', 'style2'], true) ? sanitize_key((string) ($settings['list_list_style'] ?? '')) : '', + 'card_style' => in_array(sanitize_key((string) ($settings['list_card_style'] ?? '')), ['', 'style3'], true) ? sanitize_key((string) ($settings['list_card_style'] ?? '')) : '', + 'render_mode' => $render_mode_map[$card_style] ?? 'card', + 'show_author' => $show_author, + 'show_date' => $show_date, + 'show_views' => !isset($settings['post_show_views']) || !empty($settings['post_show_views']), + 'show_category' => !isset($settings['post_show_category']) || !empty($settings['post_show_category']), + 'show_comments' => !isset($settings['post_meta_comments']) || !empty($settings['post_meta_comments']), + 'show_likes' => !isset($settings['post_meta_likes']) || !empty($settings['post_meta_likes']), + 'badge_types' => $badge_types, + 'badge_show' => !empty($badge_types), + 'sticky_pages' => $sticky_pages, + 'sticky_enabled' => !empty($sticky_pages), + 'target_blank' => $target_blank, + 'heading_bold' => !empty($settings['item_heading_bold']), + 'mobile_meta' => in_array(sanitize_key((string) ($settings['list_meta_show'] ?? 'like')), ['view', 'like', 'comm'], true) ? sanitize_key((string) ($settings['list_meta_show'] ?? 'like')) : 'like', + 'list_show_type' => in_array(sanitize_key((string) ($settings['list_show_type'] ?? 'separate')), ['separate', 'no_margin'], true) ? sanitize_key((string) ($settings['list_show_type'] ?? 'separate')) : 'separate', + 'excerpt_length' => max(20, min(500, (int) ($settings['post_excerpt_length'] ?? 120))), + 'ias_max' => max(0, min(10, (int) ($settings['ias_max'] ?? 3))), + 'paging_ajax' => self::is_list_paging_ajax($settings), + 'paging_ajax_ias' => self::is_list_paging_ajax_ias($settings), + 'ajax_trigger_text' => $ajax_trigger, + 'ajax_nomore_text' => $ajax_nomore, + 'list_orderby' => in_array(sanitize_key((string) ($settings['list_orderby'] ?? 'modified')), ['modified', 'date', 'default'], true) ? sanitize_key((string) ($settings['list_orderby'] ?? 'modified')) : 'modified', + 'columns' => max(1, min(3, (int) ($settings['post_list_columns'] ?? 1))), + 'per_page' => max(4, min(48, (int) ($settings['post_list_per_page'] ?? 12))), + 'list_style' => in_array(sanitize_key((string) ($settings['list_list_style'] ?? '')), ['', 'style2'], true) ? sanitize_key((string) ($settings['list_list_style'] ?? '')) : '', 'list_img_position' => in_array(sanitize_key((string) ($settings['list_list_img_position'] ?? 'left')), ['left', 'right'], true) ? sanitize_key((string) ($settings['list_list_img_position'] ?? 'left')) : 'left', - 'list_scale' => max(50, min(200, (int) ($settings['list_list_scale'] ?? 70))), - 'card_scale' => max(20, min(200, (int) ($settings['list_card_scale'] ?? 70))), - 'card_home' => !empty($settings['list_card_home']), - 'card_cat' => !empty($settings['list_card_cat']), - 'card_cat_ids' => is_array($settings['list_card_cat'] ?? null) ? array_map('intval', $settings['list_card_cat']) : [], - 'card_tag' => !empty($settings['list_card_tag']), - 'card_topics' => !empty($settings['list_card_topics']), - 'card_author' => !empty($settings['list_card_author']), + 'list_scale' => max(50, min(200, (int) ($settings['list_list_scale'] ?? 70))), + 'card_scale' => max(20, min(200, (int) ($settings['list_card_scale'] ?? 70))), + 'card_home' => !empty($settings['list_card_home']), + 'card_cat' => !empty($settings['list_card_cat']), + 'card_cat_ids' => is_array($settings['list_card_cat'] ?? null) ? array_map('intval', $settings['list_card_cat']) : [], + 'card_tag' => !empty($settings['list_card_tag']), + 'card_topics' => !empty($settings['list_card_topics']), + 'card_author' => !empty($settings['list_card_author']), ]; } @@ -290,6 +319,28 @@ class AKSRT_Settings_Post_Display { ]; } + + public static function apply_list_orderby($query): void { + if (is_admin() || !($query instanceof WP_Query) || !$query->is_main_query()) { + return; + } + if (!$query->is_home() && !$query->is_archive() && !$query->is_search()) { + return; + } + if ($query->get('orderby')) { + return; + } + + $orderby = sanitize_key((string) (self::get_post_list_style_settings()['list_orderby'] ?? 'modified')); + if ($orderby === '' || $orderby === 'default') { + return; + } + if (in_array($orderby, ['date', 'modified'], true)) { + $query->set('orderby', $orderby); + $query->set('order', 'DESC'); + } + } + public static function apply_list_per_page($query): void { if (is_admin() || !$query->is_main_query()) { return; @@ -310,13 +361,61 @@ class AKSRT_Settings_Post_Display { } public static function get_post_pagination_mode(): string { - $mode = (string) AKSRT_Settings::get_value('post_pagination_mode', 'numbered'); + $settings = AKSRT_Settings::get_all(); + + // Zibll: paging_ajax_s '1' = ajax append, '0' = numeric buttons. + if (array_key_exists('paging_ajax_s', $settings)) { + $ajax = self::is_list_paging_ajax($settings); + if (!$ajax) { + return 'numbered'; + } + return self::is_list_paging_ajax_ias($settings) ? 'infinite' : 'load_more'; + } + + // Temporary bridge for installs still holding the previous schema key only. + $mode = (string) ($settings['post_pagination_mode'] ?? 'numbered'); if ($mode === 'numeric') { $mode = 'numbered'; } return in_array($mode, ['numbered', 'load_more', 'infinite'], true) ? $mode : 'numbered'; } + /** + * Whether list pagination uses AJAX append (Zibll paging_ajax_s). + * + * @param array|null $settings + */ + public static function is_list_paging_ajax(?array $settings = null): bool { + $settings = $settings ?? AKSRT_Settings::get_all(); + if (!array_key_exists('paging_ajax_s', $settings)) { + // Fallback from previous 3-mode key. + $mode = (string) ($settings['post_pagination_mode'] ?? 'numbered'); + return in_array($mode, ['load_more', 'infinite', 'ajax'], true); + } + $raw = $settings['paging_ajax_s']; + if (is_bool($raw)) { + return $raw; + } + return (string) $raw === '1' || (string) $raw === 'true'; + } + + /** + * Whether AJAX list paging auto-loads on scroll (Zibll paging_ajax_ias_s). + * + * @param array|null $settings + */ + public static function is_list_paging_ajax_ias(?array $settings = null): bool { + $settings = $settings ?? AKSRT_Settings::get_all(); + if (!self::is_list_paging_ajax($settings)) { + return false; + } + if (!array_key_exists('paging_ajax_ias_s', $settings)) { + $mode = (string) ($settings['post_pagination_mode'] ?? ''); + return $mode === 'infinite'; + } + return !empty($settings['paging_ajax_ias_s']); + } + public static function get_comment_pagination_mode(): string { $mode = (string) AKSRT_Settings::get_value('comment_pagination_type', 'numbered'); if ($mode === 'page') {