feat(admin): rebuild page display settings
This commit is contained in:
+78
-81
@@ -14,16 +14,21 @@ trait FacadeBulk {
|
||||
* @return array{custom:bool,bg_custom:string,bg:string,color_custom:string}
|
||||
*/
|
||||
public static function get_header_theme_config(): array {
|
||||
$s = self::get_all();
|
||||
$s = self::read_domain('page_display', 'header-nav');
|
||||
|
||||
return [
|
||||
'custom' => !empty($s['header_theme_custom']),
|
||||
'bg_custom' => sanitize_hex_color((string) ($s['header_theme_bg_custom'] ?? '')) ?: '',
|
||||
'bg' => sanitize_hex_color((string) ($s['header_theme_bg'] ?? '')) ?: '',
|
||||
'bg' => self::normalize_palette_hex((string) ($s['header_theme_bg'] ?? '')),
|
||||
'color_custom' => sanitize_hex_color((string) ($s['header_theme_color_custom'] ?? '')) ?: '',
|
||||
];
|
||||
}
|
||||
|
||||
private static function normalize_palette_hex(string $value): string {
|
||||
$value = ltrim(trim($value), '#');
|
||||
return preg_match('/^[0-9a-f]{6}$/i', $value) ? '#' . strtolower($value) : '';
|
||||
}
|
||||
|
||||
|
||||
|
||||
/**
|
||||
@@ -31,36 +36,32 @@ trait FacadeBulk {
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public static function get_category_page_settings(): array {
|
||||
$settings = self::get_all();
|
||||
$header_style = sanitize_key((string) ($settings['category_header_style'] ?? 'cover'));
|
||||
$list_mode = sanitize_key((string) ($settings['category_list_mode'] ?? 'grid'));
|
||||
$per_page = (int) ($settings['category_per_page'] ?? 12);
|
||||
$orderby = sanitize_key((string) ($settings['category_orderby'] ?? 'modified'));
|
||||
public static function get_category_page_settings(): array {
|
||||
$settings = self::read_domain('page_display', 'category');
|
||||
$orderby_option = self::normalize_page_orderby_option($settings['cat_orderby_option'] ?? []);
|
||||
$orderby = sanitize_key((string) (($orderby_option['lists'][0] ?? 'modified')));
|
||||
$ajax_category_enabled = !empty($settings['ajax_list_cat_cat']);
|
||||
$ajax_tag_enabled = !empty($settings['ajax_list_cat_tag']);
|
||||
$orderby_enabled = !empty($settings['cat_orderby_s']);
|
||||
$post_count = !empty($settings['cat_post_count_s']);
|
||||
|
||||
if (!in_array($header_style, ['cover', 'simple', 'none'], true)) {
|
||||
$header_style = 'cover';
|
||||
}
|
||||
|
||||
if (!in_array($list_mode, ['grid', 'list', 'compact'], true)) {
|
||||
$list_mode = 'grid';
|
||||
}
|
||||
|
||||
if (!in_array($orderby, ['modified', 'date', 'views', 'comments', 'likes'], true)) {
|
||||
$orderby = 'modified';
|
||||
}
|
||||
|
||||
return [
|
||||
'header_style' => $header_style,
|
||||
'cover_enabled' => !isset($settings['category_cover_enabled']) || !empty($settings['category_cover_enabled']),
|
||||
'desc_enabled' => !isset($settings['category_desc_enabled']) || !empty($settings['category_desc_enabled']),
|
||||
'default_cover' => esc_url_raw((string) ($settings['category_default_cover'] ?? '')),
|
||||
'list_mode' => $list_mode,
|
||||
'filter_bar' => !isset($settings['category_filter_bar']) || !empty($settings['category_filter_bar']),
|
||||
'sidebar' => !isset($settings['category_sidebar']) || !empty($settings['category_sidebar']),
|
||||
'per_page' => max(4, min(48, $per_page)),
|
||||
'post_count' => !empty($settings['category_post_count']),
|
||||
'orderby' => $orderby,
|
||||
return [
|
||||
'header_style' => !empty($settings['page_cover_cat_s']) ? 'cover' : 'simple',
|
||||
'cover_enabled' => !empty($settings['page_cover_cat_s']),
|
||||
'desc_enabled' => true,
|
||||
'default_cover' => esc_url_raw((string) ($settings['cat_default_cover'] ?? '')),
|
||||
'list_mode' => 'grid',
|
||||
'filter_bar' => $ajax_category_enabled || $ajax_tag_enabled || $orderby_enabled || $post_count,
|
||||
'sidebar' => true,
|
||||
'per_page' => max(1, (int) get_option('posts_per_page', 10)),
|
||||
'post_count' => $post_count,
|
||||
'orderby' => $orderby,
|
||||
'orderby_enabled'=> $orderby_enabled,
|
||||
'orderby_option' => $orderby_option,
|
||||
'ajax_category_enabled' => $ajax_category_enabled,
|
||||
'ajax_tag_enabled' => $ajax_tag_enabled,
|
||||
'ajax_category' => is_array($settings['ajax_list_option_cat_cat'] ?? null) ? $settings['ajax_list_option_cat_cat'] : [],
|
||||
'ajax_tag' => is_array($settings['ajax_list_option_cat_tag'] ?? null) ? $settings['ajax_list_option_cat_tag'] : [],
|
||||
];
|
||||
}
|
||||
|
||||
@@ -71,68 +72,64 @@ trait FacadeBulk {
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public static function get_tag_page_settings(): array {
|
||||
$settings = self::get_all();
|
||||
$header_style = sanitize_key((string) ($settings['tag_header_style'] ?? 'simple'));
|
||||
$list_mode = sanitize_key((string) ($settings['tag_list_mode'] ?? 'grid'));
|
||||
$per_page = (int) ($settings['tag_per_page'] ?? 12);
|
||||
$orderby = sanitize_key((string) ($settings['tag_orderby'] ?? 'count'));
|
||||
public static function get_tag_page_settings(): array {
|
||||
$settings = self::read_domain('page_display', 'tag');
|
||||
$orderby_option = self::normalize_page_orderby_option($settings['tag_orderby_option'] ?? []);
|
||||
$orderby = sanitize_key((string) (($orderby_option['lists'][0] ?? 'modified')));
|
||||
$ajax_category_enabled = !empty($settings['ajax_list_tag_cat']);
|
||||
$ajax_tag_enabled = !empty($settings['ajax_list_tag_tag']);
|
||||
$orderby_enabled = !empty($settings['tag_orderby_s']);
|
||||
$post_count = !empty($settings['tag_post_count_s']);
|
||||
|
||||
if (!in_array($header_style, ['cover', 'simple', 'none'], true)) {
|
||||
$header_style = 'simple';
|
||||
}
|
||||
|
||||
if (!in_array($list_mode, ['grid', 'list'], true)) {
|
||||
$list_mode = 'grid';
|
||||
}
|
||||
|
||||
if (!in_array($orderby, ['count', 'name', 'modified'], true)) {
|
||||
$orderby = 'count';
|
||||
}
|
||||
|
||||
return [
|
||||
'header_style' => $header_style,
|
||||
return [
|
||||
'header_style' => !empty($settings['page_cover_tag_s']) ? 'cover' : 'simple',
|
||||
'cover_enabled' => !empty($settings['page_cover_tag_s']),
|
||||
'default_cover' => esc_url_raw((string) ($settings['tag_default_cover'] ?? '')),
|
||||
'list_mode' => $list_mode,
|
||||
'sidebar' => !isset($settings['tag_sidebar']) || !empty($settings['tag_sidebar']),
|
||||
'per_page' => max(4, min(48, $per_page)),
|
||||
'post_count' => !empty($settings['tag_post_count']),
|
||||
'orderby' => $orderby,
|
||||
'list_mode' => 'grid',
|
||||
'sidebar' => true,
|
||||
'per_page' => max(1, (int) get_option('posts_per_page', 10)),
|
||||
'post_count' => $post_count,
|
||||
'filter_bar' => $ajax_category_enabled || $ajax_tag_enabled || $orderby_enabled || $post_count,
|
||||
'orderby' => $orderby,
|
||||
'orderby_enabled'=> $orderby_enabled,
|
||||
'orderby_option' => $orderby_option,
|
||||
'ajax_category_enabled' => $ajax_category_enabled,
|
||||
'ajax_tag_enabled' => $ajax_tag_enabled,
|
||||
'ajax_category' => is_array($settings['ajax_list_option_tag_cat'] ?? null) ? $settings['ajax_list_option_tag_cat'] : [],
|
||||
'ajax_tag' => is_array($settings['ajax_list_option_tag_tag'] ?? null) ? $settings['ajax_list_option_tag_tag'] : [],
|
||||
];
|
||||
}
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* Misc page display settings (404, search, author).
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public static function get_other_page_settings(): array {
|
||||
$settings = self::get_all();
|
||||
$message = trim((string) ($settings['page_404_message'] ?? ''));
|
||||
$search_per_page = max(4, min(48, (int) ($settings['page_search_per_page'] ?? 12)));
|
||||
$author_per_page = max(4, min(48, (int) ($settings['page_author_posts_per_page'] ?? 12)));
|
||||
|
||||
$header_style = sanitize_key((string) ($settings['page_header_style'] ?? '1'));
|
||||
/** @return array{header_style:string,header_cover_img:string} */
|
||||
public static function get_other_page_settings(): array {
|
||||
$settings = self::read_domain('page_display', 'other');
|
||||
$header_style = sanitize_key((string) ($settings['page_header_style'] ?? ''));
|
||||
if (!in_array($header_style, ['', '1', '2', '3'], true)) {
|
||||
$header_style = '1';
|
||||
}
|
||||
$header_style = '';
|
||||
}
|
||||
|
||||
return [
|
||||
'header_style' => $header_style,
|
||||
'header_cover_img' => esc_url_raw((string) ($settings['page_header_cover_img'] ?? '')),
|
||||
'page_404_message' => $message !== '' ? $message : __('页面未找到', 'aksrt'),
|
||||
'page_404_search' => !isset($settings['page_404_search']) || !empty($settings['page_404_search']),
|
||||
'page_404_popular' => !isset($settings['page_404_popular']) || !empty($settings['page_404_popular']),
|
||||
'page_404_back' => !isset($settings['page_404_back']) || !empty($settings['page_404_back']),
|
||||
'page_search_sidebar' => !isset($settings['page_search_sidebar']) || !empty($settings['page_search_sidebar']),
|
||||
'page_search_per_page' => $search_per_page,
|
||||
'page_author_cover' => !isset($settings['page_author_cover']) || !empty($settings['page_author_cover']),
|
||||
'page_author_sidebar' => !isset($settings['page_author_sidebar']) || !empty($settings['page_author_sidebar']),
|
||||
'page_author_posts_per_page' => $author_per_page,
|
||||
'header_style' => $header_style,
|
||||
'header_cover_img' => esc_url_raw((string) ($settings['page_header_cover_img'] ?? '')),
|
||||
];
|
||||
}
|
||||
|
||||
/** @param mixed $value */
|
||||
private static function normalize_page_orderby_option($value): array {
|
||||
$option = is_array($value) ? $value : [];
|
||||
$allowed = self::homepage_allowed_sorts();
|
||||
$lists = is_array($option['lists'] ?? null) ? $option['lists'] : [];
|
||||
$lists = array_values(array_intersect(array_map('sanitize_key', $lists), $allowed));
|
||||
if ($lists === []) {
|
||||
$lists = ['modified', 'views', 'like', 'comment_count'];
|
||||
}
|
||||
return [
|
||||
'lists' => $lists,
|
||||
'dropdown' => !empty($option['dropdown']),
|
||||
];
|
||||
}
|
||||
/**
|
||||
* Share and poster settings.
|
||||
*
|
||||
|
||||
Reference in New Issue
Block a user