feat(widgets): multi-tab posts lazy REST load

SSR first tab; other tabs fetch /widgets/tab-posts on switch
via widget-set.js (zibll tab_post depth).
This commit is contained in:
kate522 committed 2026-07-20 20:50:57 +08:00
1 parent 46c5fec180
commit c52651f647
2 files changed
+298 -292

No files matched your search

+34
View File
@@ -17,6 +17,39 @@
var tabs = widget.querySelectorAll('.widget-tab-posts__tab');
var panels = widget.querySelectorAll('.widget-tab-posts__panel');
if (!tabs.length || !panels.length) return;
var rest = widget.getAttribute('data-rest') || '';
var defaultCount = widget.getAttribute('data-count') || '5';
function loadPanel(panel, tab) {
if (!panel || panel.getAttribute('data-loaded') === '1' || !rest) return;
var orderby = tab.getAttribute('data-orderby') || 'date';
var cat = tab.getAttribute('data-cat') || '0';
var tabCount = tab.getAttribute('data-tab-count') || '0';
var qs = new URLSearchParams({
count: defaultCount,
orderby: orderby,
cat: cat,
tab_count: tabCount,
});
var url = rest + (rest.indexOf('?') > -1 ? '&' : '?') + qs.toString();
panel.classList.add('is-ajax-loading');
var headers = { Accept: 'application/json' };
if (window.aksrtData && aksrtData.restNonce) {
headers['X-WP-Nonce'] = aksrtData.restNonce;
}
fetch(url, { credentials: 'same-origin', headers: headers })
.then(function (r) { return r.json(); })
.then(function (j) {
var d = (j && j.data) || j || {};
var html = d.html || '';
panel.innerHTML = html || '<p class="widget-empty">暂无文章</p>';
panel.setAttribute('data-loaded', '1');
panel.classList.remove('is-ajax-loading');
})
.catch(function () {
panel.classList.remove('is-ajax-loading');
});
}
tabs.forEach(function (tab) {
tab.addEventListener('click', function () {
@@ -33,6 +66,7 @@
panel.classList.toggle('active', active);
if (active) {
panel.removeAttribute('hidden');
loadPanel(panel, tab);
} else {
panel.setAttribute('hidden', '');
}