✏️ 正在编辑: pagination.php
路径:
/home/h359620/public_html/wp-content/themes/datis/inc/includes/pagination.php
提示:
您可以编辑任何文件(包括二进制文件),但请注意不当修改可能导致文件损坏。
<?php /** * Datis Pagination */ if (!defined('ABSPATH')) { exit; } if (!class_exists('Datis_Pagination')) { final class Datis_Pagination { /** * @var Datis_Pagination|null */ private static $instance = null; /** * Default args (filterable) */ private $args = [ 'style' => 'style-1', 'wrap_class' => 'datis-pagination', 'item_class' => 'datis-pagination-item', 'current_class' => 'is-current', 'prev_label' => '←', 'next_label' => '→', 'text_domain' => 'datis', // New optional args (for non-WP_Query pagination) 'total' => 0, 'current' => 0, 'base_url' => '', 'format' => '', ]; public static function get_instance(): self { if (is_null(self::$instance)) { self::$instance = new self(); } return self::$instance; } private function __construct() { $this->args = apply_filters('datis_pagination_args', $this->args); } private function __clone() {} public function __wakeup() { throw new \Exception('Cannot unserialize singleton'); } private function resolve_style_from_demo(): string { $demo = get_option('datis_active_demo', 'architecture'); $map = [ 'architecture' => 'style-1', 'business' => 'style-2', 'industry' => 'style-3', ]; return $map[$demo] ?? 'style-1'; } /** * Resolve current page number. * * Notes: * - Standard WP pagination uses "paged" or sometimes "page". * - WooCommerce My Account endpoints may store pagination inside the endpoint query var. * Example: /my-account/orders/page/2/ => get_query_var('orders') returns "page/2". */ private function resolve_current_page(array $a): int { if (!empty($a['current'])) { return max(1, (int) $a['current']); } $paged = (int) get_query_var('paged'); if ($paged > 0) { return max(1, $paged); } $page = (int) get_query_var('page'); if ($page > 0) { return max(1, $page); } // WooCommerce My Account endpoint pagination support (orders, downloads, etc.) if (function_exists('WC') && isset(WC()->query) && method_exists(WC()->query, 'get_current_endpoint')) { $endpoint = (string) WC()->query->get_current_endpoint(); if ($endpoint !== '') { $endpoint_val = (string) get_query_var($endpoint); // Most common format: "page/2" if ($endpoint_val !== '' && preg_match('~/page/(\d+)(?:/|$)~', $endpoint_val, $m)) { return max(1, (int) $m[1]); } // Fallback: if endpoint query var is just a number for any reason. if ($endpoint_val !== '' && ctype_digit($endpoint_val)) { return max(1, (int) $endpoint_val); } } } return 1; } private function resolve_total_pages($query, array $a): int { if (!empty($a['total'])) { return max(0, (int) $a['total']); } if ($query instanceof WP_Query) { return max(0, (int) $query->max_num_pages); } return 0; } private function resolve_base_and_format(array $a): array { $base_url = (string) ($a['base_url'] ?? ''); $format = (string) ($a['format'] ?? ''); if ($base_url !== '') { $base_url = trailingslashit($base_url); if ($format === '') { $format = 'page/%#%/'; } return [$base_url, $format]; } // Try to auto-detect My Account endpoint base. if (function_exists('WC') && isset(WC()->query) && method_exists(WC()->query, 'get_current_endpoint')) { $endpoint = (string) WC()->query->get_current_endpoint(); if ($endpoint !== '' && function_exists('wc_get_account_endpoint_url')) { $base_url = trailingslashit(wc_get_account_endpoint_url($endpoint)); $format = $format !== '' ? $format : 'page/%#%/'; return [$base_url, $format]; } } // Fallback to current URL. $base_url = trailingslashit(get_pagenum_link(1)); $format = $format !== '' ? $format : 'page/%#%/'; return [$base_url, $format]; } public function current(array $args = []): int { return $this->resolve_current_page($args); } /** * Render pagination. * * @param WP_Query|null $query * @param array $override_args * * @return string */ public function render($query = null, array $override_args = []): string { if (!$query) { global $wp_query; $query = $wp_query; } if (empty($override_args['style'])) { $override_args['style'] = $this->resolve_style_from_demo(); } $a = wp_parse_args($override_args, $this->args); $current = $this->resolve_current_page($a); $total = $this->resolve_total_pages($query, $a); if ($total <= 1) { return ''; } [$base_url, $format] = $this->resolve_base_and_format($a); $data = [ 'current' => $current, 'total' => $total, 'base_url' => $base_url, 'format' => $format, 'args' => $a, ]; $data = apply_filters('datis_pagination_data', $data, $query); ob_start(); $style = !empty($a['style']) ? $a['style'] : 'style-1'; get_template_part('template-parts/pagination/pagination', $style, $data); return ob_get_clean(); } } if (!function_exists('datis_pagination')) { function datis_pagination(array $args = []): void { echo Datis_Pagination::get_instance()->render(null, $args); } } }
💾 保存文件
← 返回文件管理器