- assets/vendor 全量迁移: fontawesome5→assets/fontawesome5, css→assets/css, js→assets/js/runtime(避开 14 个同名自有文件), img 合并去重→assets/img, fonts→assets/fonts; 删除 assets/vendor - libs 五个与 widgets/third-party 字节相同的库不重复入库, loader paths 改指向 - 运行时切换: _win.uri=assets 根, loader baseUrl=/js/runtime, enlighter 注入 路径同步; PHP 7 个引用文件切换并改名 $zibll_*→$runtime_* - 去品牌: Qinver 头注释/品牌 console.log/演示链接清除, 默认文案中性化 - 功能标识符改名: zib__→aksrt__, zib_ajax→aksrt_ajax, window.zib→ window.aksrtLegacy, zibllblock/*→aksrtblock/*, .zib-widget→.aksrt-panel, .zib-slider→.aksrt-slider, zib_menu_options meta 键等 - 自有 CSS 改名: legacy-utilities/compat-vars/footer shell - admin SPA 重建; 契约测试同步(路径/断言/文件更名) - 例外保留: tests/visual 对照环境与 fixtures 前缀(外部 Zibll 产品引用) 验证: php -l 133 个改动文件通过; runtime 86 个 JS node --check 通过; 契约测试 68/70(2 个失败经 stash 对照确认为存量问题)
229 lines
8.6 KiB
PHP
229 lines
8.6 KiB
PHP
<?php
|
|
/**
|
|
* Template Name: AKSRT - 文章导航
|
|
* Template Post Type: page
|
|
*
|
|
* legacy pages/postsnavs.php 1:1 — selected categories with full post lists,
|
|
* affix TOC sidebar, admin drag-sort settings modal.
|
|
*
|
|
* @package AKSRT
|
|
*/
|
|
|
|
defined('ABSPATH') || exit;
|
|
|
|
$post = get_queried_object();
|
|
$post_id = $post instanceof WP_Post ? (int) $post->ID : (int) get_queried_object_id();
|
|
|
|
$show_cat_id = get_post_meta($post_id, 'navs_show_cat_id', true);
|
|
if (!is_array($show_cat_id)) {
|
|
$show_cat_id = $show_cat_id !== '' && $show_cat_id !== null
|
|
? array_values(array_filter(array_map('intval', (array) $show_cat_id)))
|
|
: [];
|
|
} else {
|
|
$show_cat_id = array_values(array_filter(array_map('intval', $show_cat_id)));
|
|
}
|
|
|
|
$page_desc = (string) get_post_meta($post_id, 'navs_page_desc', true);
|
|
$page_name = (string) get_post_meta($post_id, 'navs_page_name', true);
|
|
$title = get_the_title($post_id);
|
|
$page_name = $page_name !== '' ? $page_name : $title;
|
|
|
|
$all_cats = get_categories([
|
|
'orderby' => 'term_group',
|
|
'order' => 'ASC',
|
|
'hide_empty' => false,
|
|
]);
|
|
|
|
$can_admin = is_user_logged_in() && current_user_can('manage_options');
|
|
|
|
get_header();
|
|
?>
|
|
<style>
|
|
.page-share a { margin-right: 10px; }
|
|
.page-share a > text { display: none; }
|
|
</style>
|
|
|
|
<div class="container">
|
|
<div class="main-bg theme-box radius8 main-shadow box-body">
|
|
<div class="box-body">
|
|
<h2 class="theme-box">
|
|
<?php echo esc_html($page_name); ?>
|
|
<?php if ($can_admin) : ?>
|
|
<small>
|
|
<a style="cursor:pointer" href="javascript:;" data-toggle="modal" data-target="#post-navs-sz">
|
|
[<?php esc_html_e('设置', 'aksrt'); ?>]
|
|
</a>
|
|
</small>
|
|
<?php endif; ?>
|
|
</h2>
|
|
<div class="flex ab jsb hh">
|
|
<div class="muted-color mr20">
|
|
<?php echo esc_html($page_desc !== '' ? $page_desc : __('暂无简介内容,请设置', 'aksrt')); ?>
|
|
</div>
|
|
<div class="pull-right page-share mt20">
|
|
<?php
|
|
if (function_exists('aksrt_render_share_buttons')) {
|
|
aksrt_render_share_buttons(['compact' => true]);
|
|
} elseif (function_exists('aksrt_get_share_html')) {
|
|
echo aksrt_get_share_html(); // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
|
|
}
|
|
?>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<main class="container page-template-posts-navs">
|
|
<div class="content-wrap">
|
|
<div class="content-layout">
|
|
<div class="posts-navs" data-nav="posts">
|
|
<?php
|
|
if (!empty($show_cat_id)) {
|
|
foreach ($show_cat_id as $c_id) {
|
|
$the_cat = get_category((int) $c_id);
|
|
if (!$the_cat || is_wp_error($the_cat)) {
|
|
continue;
|
|
}
|
|
$posts = get_posts([
|
|
'category' => (int) $c_id,
|
|
'numberposts' => -1,
|
|
'post_status' => 'publish',
|
|
'orderby' => 'date',
|
|
'order' => 'DESC',
|
|
'suppress_filters' => false,
|
|
]);
|
|
if (empty($posts)) {
|
|
continue;
|
|
}
|
|
$section_id = 'navs-cat-' . (int) $c_id;
|
|
echo '<div class="theme-box">';
|
|
echo '<div class="box-body notop"><div class="title-theme"><h2 id="' . esc_attr($section_id) . '">' . esc_html($the_cat->name) . '</h2></div></div>';
|
|
echo '<div class="main-bg radius8 main-shadow box-body"><ul class="posts-navs__list">';
|
|
foreach ($posts as $p) {
|
|
$time_tip = get_the_time('Y年m月d日 H:i', $p);
|
|
$time_ago = human_time_diff(get_the_time('U', $p), current_time('timestamp')) . __('前', 'aksrt');
|
|
$views = function_exists('aksrt_get_post_views') ? (int) aksrt_get_post_views($p->ID) : 0;
|
|
$likes = (int) get_post_meta($p->ID, 'like', true);
|
|
if ($likes <= 0) {
|
|
$likes = (int) get_post_meta($p->ID, 'aksrt_like', true);
|
|
}
|
|
$post_tip = sprintf(
|
|
/* translators: 1: views 2: likes */
|
|
__('阅读(%1$s) 点赞(%2$s)', 'aksrt'),
|
|
(string) $views,
|
|
(string) $likes
|
|
);
|
|
$subtitle = (string) get_post_meta($p->ID, 'subtitle', true);
|
|
if ($subtitle === '') {
|
|
$subtitle = (string) get_post_meta($p->ID, 'aksrt_subtitle', true);
|
|
}
|
|
echo '<li class="posts-navs__item">';
|
|
echo '<div class="text-ellipsis">';
|
|
echo '<span title="' . esc_attr($time_tip) . '" class="muted-2-color">' . esc_html($time_ago) . '</span>';
|
|
echo '<span class="icon-circle"></span>';
|
|
echo '<a title="' . esc_attr($post_tip) . '" href="' . esc_url(get_permalink($p->ID)) . '">';
|
|
echo esc_html(get_the_title($p->ID));
|
|
if ($subtitle !== '') {
|
|
echo ' <span class="muted-2-color">' . esc_html($subtitle) . '</span>';
|
|
}
|
|
echo '</a></div></li>';
|
|
}
|
|
echo '</ul></div></div>';
|
|
}
|
|
} elseif ($can_admin) {
|
|
echo '<div class="theme-box main-bg radius8 main-shadow box-body">';
|
|
echo '<p class="muted-2-color">' . esc_html__('尚未选择分类,请点击标题旁「设置」配置要展示的分类。', 'aksrt') . '</p>';
|
|
echo '</div>';
|
|
} else {
|
|
echo '<div class="theme-box main-bg radius8 main-shadow box-body">';
|
|
echo '<p class="muted-2-color">' . esc_html__('暂无导航内容', 'aksrt') . '</p>';
|
|
echo '</div>';
|
|
}
|
|
?>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div class="sidebar">
|
|
<div class="posts-nav-box" data-affix="true" data-title="<?php esc_attr_e('导航目录', 'aksrt'); ?>"></div>
|
|
</div>
|
|
</main>
|
|
|
|
<?php if ($can_admin) : ?>
|
|
<div class="modal fade" id="post-navs-sz" tabindex="-1" role="dialog" aria-hidden="true">
|
|
<div class="modal-dialog" role="document">
|
|
<div class="modal-content">
|
|
<form id="aksrt-posts-navs-settings" class="aksrt-posts-navs-settings">
|
|
<div class="modal-header">
|
|
<p class="modal-title">
|
|
<?php esc_html_e('当前页面设置', 'aksrt'); ?>
|
|
<button type="button" class="close" data-dismiss="modal" aria-label="<?php esc_attr_e('关闭', 'aksrt'); ?>">
|
|
<i class="fa fas fa-times" aria-hidden="true"></i>
|
|
</button>
|
|
</p>
|
|
</div>
|
|
<div class="modal-body">
|
|
<div class="form-group">
|
|
<label for="navs_page_name"><?php esc_html_e('标题', 'aksrt'); ?></label>
|
|
<input type="text" class="form-control" id="navs_page_name" name="navs_page_name" placeholder="<?php esc_attr_e('自定义标题', 'aksrt'); ?>" value="<?php echo esc_attr($page_name); ?>">
|
|
</div>
|
|
<div class="form-group">
|
|
<label for="navs_page_desc"><?php esc_html_e('简介', 'aksrt'); ?></label>
|
|
<input type="text" class="form-control" id="navs_page_desc" name="navs_page_desc" placeholder="<?php esc_attr_e('自定义简介', 'aksrt'); ?>" value="<?php echo esc_attr($page_desc); ?>">
|
|
</div>
|
|
<div class="form-group">
|
|
<label><?php esc_html_e('请将需要显示的分类拖动到选区并排序', 'aksrt'); ?></label>
|
|
<div class="row text-center">
|
|
<div class="col-xs-6 col-sm-6">
|
|
<p class="text-muted"><?php esc_html_e('未选择的分类', 'aksrt'); ?></p>
|
|
<div class="cat-group mini-scrollbar" id="cat-sortable">
|
|
<?php
|
|
foreach ($all_cats as $the_cat) {
|
|
$c_id = (int) $the_cat->term_id;
|
|
if (in_array($c_id, $show_cat_id, true)) {
|
|
continue;
|
|
}
|
|
$c_name = rtrim((string) get_category_parents($c_id, false, '>'), '>');
|
|
echo '<span class="sortable-cat-item" draggable="true" data-id="' . esc_attr((string) $c_id) . '">'
|
|
. esc_html($c_name)
|
|
. '<span class="badge">' . (int) $the_cat->count . '</span></span>';
|
|
}
|
|
?>
|
|
</div>
|
|
</div>
|
|
<div class="col-xs-6 col-sm-6">
|
|
<p class="text-muted"><?php esc_html_e('已选择的分类', 'aksrt'); ?></p>
|
|
<div class="cat-group mini-scrollbar" id="cat-sortable-ok">
|
|
<?php
|
|
foreach ($show_cat_id as $c_id) {
|
|
$the_cat = get_category((int) $c_id);
|
|
if (!$the_cat || is_wp_error($the_cat)) {
|
|
continue;
|
|
}
|
|
$c_name = rtrim((string) get_category_parents((int) $c_id, false, '>'), '>');
|
|
echo '<span class="sortable-cat-item" draggable="true" data-id="' . esc_attr((string) $c_id) . '">'
|
|
. esc_html($c_name)
|
|
. '<span class="badge">' . (int) $the_cat->count . '</span></span>';
|
|
}
|
|
?>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div class="modal-footer">
|
|
<input type="hidden" name="action" value="aksrt_post_navs_settings">
|
|
<input type="hidden" name="page_id" value="<?php echo (int) $post_id; ?>">
|
|
<?php wp_nonce_field('aksrt_post_navs_settings', '_wpnonce', false); ?>
|
|
<button type="submit" class="btn btn-primary" evt="action"><?php esc_html_e('确认修改', 'aksrt'); ?></button>
|
|
</div>
|
|
</form>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div class="navs-bj"></div>
|
|
<?php
|
|
endif;
|
|
|
|
get_footer();
|