=== 一介資男(Mxp.TW) 開發工具箱 ===
Contributors: mxp
Donate link: https://mxp.tw/lw
Tags: development, snippets, database, migration, security
Requires at least: 5.6
Requires PHP: 7.4
Tested up to: 7.1
Stable tag: 3.5.9
License: GPLv3
License URI: https://www.gnu.org/licenses/gpl-3.0.html

WordPress 開發與維運工具箱，整合外掛安裝、資料庫維護、搬站輔助、安全片段與站點管理。

== Description ==

一介資男(Mxp.TW) 開發工具箱不是單一功能外掛，而是一個 WordPress 開發、維運、搬站與站點管理工具包。套件內含主要工具箱與三個可獨立啟用的子外掛，讓管理員只啟用目前站台需要的能力。

= 套件架構 =

* `Dev Tools - Mxp.TW`：主要工具箱。提供外掛/主題安裝、打包、取代、資料庫維護、網站設定檢視與檔案異動檢查。
* `Dev Tools: Snippets - Mxp.TW`：常用維運片段。集中處理安全強化、登入/後台調整、媒體上傳政策、報告排程與網域到期檢查。
* `Dev Tools: Site Manager - Mxp.TW`：多站管理輔助。匯出/匯入站台資訊，並以 passkey、加密 token 與 HMAC 提供跨站快速登入。
* `Dev Tools: Hide Login Page - Mxp.TW`：登入路徑防護。將預設登入入口改為自訂路徑，並把原始登入與未登入後台入口導向 404。

= Dev Tools - Mxp.TW（主要工具箱） =

主要工具箱面向高權限管理員與開發者，功能集中在「安裝、搬站、檢查、替換」：

* 開發常用外掛清單：從遠端清單與 WordPress.org API 取得外掛資訊，支援安裝、更新與啟用。
* Themeforest List：輸入 Envato 或 MXP 授權碼後，列出可下載的主題、外掛與其他檔案，並支援線上安裝。
* 外掛搜尋工具：在後台嵌入作者整理的外掛搜尋介面，從可信來源帶回下載連結後安裝。
* 外掛/主題打包：可從外掛列表、主題工具、最近異動檔案、`wp-content` 或 `wp-config.php` 產生 ZIP 下載。
* 外掛/主題取代：上傳 ZIP 後解析外掛或主題資訊，比對既有項目，取代前建立備份，失敗時回滾。
* 調整內容作者工具：依 Post Type 批次改寫內容作者。
* 查看網站各項設定：顯示外部網路資訊、`wp-config.php` 常數、使用者定義常數、`.htaccess` 與 `.user.ini`。
* 主機 PHP 設定：在 `phpinfo()` 可用時顯示 PHP/主機設定。
* 資料庫檢視與匯出：列出資料庫與資料表，支援單表、全表、背景 SQL 匯出與 `wp-content` 打包。
* 資料庫關鍵字取代：以 Search Replace DB 類別處理序列化資料安全的預覽與實際取代。
* WP 資料庫最佳化：檢視大型 autoload options，清理 orphan/duplicate meta、未使用 option、使用者 metabox，也提供重置 WordPress 的高風險操作。
* 查看最近變更檔案：掃描並分類近期異動的核心、上傳、主題、外掛與其他檔案。
* Hook 執行時間除錯：登入狀態下加上 `?debug` 時，在 admin bar 顯示 hook 執行時間統計。

= Dev Tools: Snippets - Mxp.TW（常用片段與站台行為） =

Snippets 子外掛會直接接管多個 WordPress hook，適合用 `wp-config.php` 先定義 `MDT_*` 常數後再啟用。

* 安全強化：停用 XML-RPC、隱藏 REST 使用者資料、移除多種前端 metadata/oEmbed/shortlink 輸出、隱藏作者資訊與頭像、停用 self-ping。
* HTTP 標頭：可輸出 frame-options、XSS protection、content type options、cross-domain policy 與 HSTS 類型標頭。
* 檔案修改保護：預設啟用 `DISALLOW_FILE_MODS` / `DISALLOW_FILE_EDIT`，並保護指定管理員不被一般後台列表、編輯、刪除或降權流程影響。
* 登入與後台調整：登入頁 Logo、登入後導向、管理信箱同步、註冊開關、封鎖使用者登入、顯示內容/分類/使用者 ID、使用者註冊時間欄位、隱藏非管理員更新提示與 Customize 選單。
* 媒體與上傳政策：可停用縮圖產生、停用大圖縮放、上傳圖片大小限制、自動填入圖片標題/alt/content，並對特權管理員與一般使用者套用不同的檔案大小與 MIME 規則。
* Bot/垃圾防護：登入、註冊、WooCommerce 與留言表單加入 honeypot 與時間戳檢查。
* 前台 Basic Auth：可啟用簡易前台驗證，並以指定 query key/cookie 暫時略過。
* 外部 HTTP 請求管控：可封鎖指定網域，或啟用全域封鎖後只允許白名單。
* 站台健康回報與自動更新排程：可透過排程回報站台資訊，也可在排程內更新指定外掛。
* 網域到期檢查：Dashboard widget 顯示 `home_url()`、`site_url()`、多站、額外指定網域與 filter 網域的 RDAP/WHOIS 結果，包含到期日、註冊商、狀態、DNSSEC、Name Server、原始資料與通知狀態。

網域到期檢查常用設定：

* `MDT_DOMAIN_EXPIRY_CHECK`：是否啟用網域到期檢查，預設 `true`。
* `MDT_DOMAIN_EXPIRY_NOTICE_DAYS`：到期通知門檻，預設 `90, 60, 30, 14, 7, 3, 1` 天。
* `MDT_DOMAIN_EXPIRY_EXTRA_DOMAINS`：額外指定檢查網域，支援陣列或逗號分隔字串。
* `MDT_DOMAIN_EXPIRY_OBSERVE_HOSTS`：是否自動記錄非設定來源的 HTTP_HOST，預設 `false`。
* `MDT_DOMAIN_EXPIRY_OBSERVED_HOST_RETENTION_DAYS`：觀察到的 HTTP_HOST 紀錄保留天數，預設 `180`。
* `MDT_DOMAIN_EXPIRY_MAX_DOMAINS_PER_RUN`：單次排程最多查詢數量，預設 `20`。
* `MDT_DOMAIN_EXPIRY_STORE_RAW_DATA`：是否儲存 RDAP/WHOIS 原始資料，預設 `true`。

= Dev Tools: Site Manager - Mxp.TW（多站管理） =

Site Manager 用來把多個 WordPress 站台整理成一張管理表。

* 匯出目前站台資訊：包含站台 URL、站名、管理員信箱、IPv4、IPv6、DNS A/NS 記錄與 Whois/網域到期資訊。
* 匯入其他站台匯出的設定字串，儲存在 `mxp_dev_sites_info_db` 站台選項。
* 管理表以 DataTables 顯示站台 URL、站名、信箱、IP、DNS、網域到期日與操作。
* 快速登入：對已匯入站台產生加密 token 與 HMAC，POST 到目標站後由目標站驗證 passkey 與 15 秒時間窗，再登入最高權限管理員。
* 重置站台密鑰：刪除本機 passkey 並在下次使用時重建；既有匯出字串會因此失效。
* 支援單站 Tools 頁面與 multisite Network Admin 頁面。

匯出的字串包含 passkey。請只在可信任管理員與可信任傳輸渠道中保存或分享。

= Dev Tools: Hide Login Page - Mxp.TW（登入路徑防護） =

Hide Login Page 沒有設定頁，透過常數控制：

* `MDT_LOGIN_PATH`：預設 `admin-staff`，登入網址會變成 `/admin-staff/`；未啟用 pretty permalink 時使用 `/?admin-staff`。
* `MDT_LOGIN_PATH_DISPLAY`：預設 `true`；設為 `false` 時可在外掛列表隱藏此子外掛。

啟用後，`wp-login.php`、`/login`、`wp-register`、`wp-activate` 與非 multisite 的 `wp-signup` 會走 404 流程；未登入的 `/wp-admin/` 請求也會被導到 `/404`。此外掛也會改寫 WordPress 產生的登入 URL、redirect URL、welcome email 中的登入連結，以及 WooCommerce 密碼重設連結。

= 使用風險與外部服務 =

* 此套件設計給可信任管理員、開發者與站台維護者使用，不適合開放給一般後台使用者。
* 搜尋取代、資料庫最佳化、WordPress 重置、批次改作者、外掛/主題取代都會改寫資料或檔案；操作前請先確認備份可還原。
* 主要工具箱會讀取並顯示 `wp-config.php`、`.htaccess`、`.user.ini`、PHP 設定與資料庫資訊。
* 部分功能依賴外部服務：GitHub 清單、WordPress.org API、Envato/MXP 購買清單、live.mxp.tw 外掛搜尋、undo.im 網路/Whois API、RDAP/WHOIS/Public Suffix List。
* `ZipArchive`、網路連線、檔案系統權限與主機 PHP 限制會影響打包、匯出、安裝與替換功能。

== Installation ==

1. Upload the plugin files to the `/wp-content/plugins/mxp-dev-tools/` directory, or install the plugin from the WordPress Plugins screen.
2. Activate the main `Dev Tools - Mxp.TW` plugin through the **Plugins** screen in WordPress.
3. Activate optional sub-plugins only when needed: `Dev Tools: Snippets - Mxp.TW`, `Dev Tools: Site Manager - Mxp.TW`, or `Dev Tools: Hide Login Page - Mxp.TW`.
4. Open 「開發工具箱」 or the relevant sub-plugin admin page in the WordPress admin menu.
5. For advanced behavior, define the documented `MDT_*` constants in `wp-config.php` before WordPress loads.

== Frequently Asked Questions ==

= Why are there multiple plugin entries after installation? =

The package intentionally contains a main plugin plus optional sub-plugins. This lets a site enable only the tools it needs while keeping one shared release package and update path.

= Should I activate every sub-plugin? =

No. Activate the main toolbox for development and maintenance tools. Activate Snippets, Site Manager, or Hide Login Page only when the site needs those behaviors, because each sub-plugin changes runtime hooks.

= Where are Snippets settings configured? =

Most Snippets behavior is controlled with `MDT_*` constants defined before WordPress loads, usually in `wp-config.php`. Some behavior also has filters documented in the source.

= Will observed HTTP_HOST domains be shown on the domain expiry dashboard? =

No by default. Since 3.5.9, `MDT_DOMAIN_EXPIRY_OBSERVE_HOSTS` defaults to `false`, and observed-only hosts are kept behind a separate detail page instead of the main dashboard list.

= How do I add extra domains to the expiry check? =

Define `MDT_DOMAIN_EXPIRY_EXTRA_DOMAINS` in `wp-config.php` as an array or comma-separated string.

= How do I change the hidden login URL? =

Define `MDT_LOGIN_PATH` before WordPress loads. The default slug is `admin-staff`.

= Is Site Manager passwordless login safe to share? =

No. The exported site string includes the passkey used to create login tokens. Treat it like an administrator credential and share it only through trusted channels.

= Do I need to back up before using database or replacement tools? =

Yes. Database search/replace, optimization, cleanup, reset, bulk author changes, and file replacement tools can modify production data or files. Always keep a verified backup before running destructive actions.

== Screenshots ==

1. ** 常用外掛操作列表 ** - 作者常用外掛安裝、啟用批次操作區域。

2. ** Themeforest 外掛、主題下載 ** -  輸入 Themeforest 建立的授權碼取得帳號下購買的主題或外掛，線上安裝。

3. ** 批次修改全站內容作者 ** - 指定內容類型全站調整作者權限，讓客戶帳號方便作業。

4. ** 超快速搜尋外掛工具 ** - 作者自行整理的官方外掛庫，每日更新，用來快速找對外掛資源。

5. ** 主題打包工具 ** - 網站主題一鍵打包下載功能。

6. ** 外掛列表頁面打包工具 ** - 網站外掛一鍵打包下載功能。

7. ** 資料庫與資料表檢視與匯出工具 ** - 查看資料庫與資料表設定，並提供匯出備份功能。

8. ** 資料庫關鍵字搜尋與取代工具 ** - 指定或全站資料表掃描固定字眼並取代的功能，搬家時換網域常用。

== Upgrade Notice ==

= 3.5.9 =
HTTP_HOST 自動觀察預設關閉；既有 observed host 會遷移為含首次/最後看到時間的紀錄，主控制台僅顯示直接相關網域。


== Changelog ==

= 3.5.9 =

* 調整網域到期檢查的 observed host 行為：預設不再自動記錄 HTTP_HOST，可用 `MDT_DOMAIN_EXPIRY_OBSERVE_HOSTS` 啟用。
* 新增 observed host 180 天保留規則、獨立檢視頁與刪除操作，避免非主要網域直接出現在控制台。

= 3.5.8 =

* 新增網域到期檢查資訊的註冊商、註冊日期、網域狀態、DNSSEC 與 Name Server 等基本細節。
* 調整網域到期通知文案，改用「已進入到期前提醒」並加入註冊商資訊，方便確認續約平台。

= 3.5.7 =

* 調整網域到期檢查資訊顯示完整主機名稱，避免子網域被簡化為主網域。
* 調整網域到期通知規則，僅通知 home_url / site_url 類型來源，純 observed_host 不寄送通知。

= 3.5.6 =

* 調整網域到期檢查資訊的後台文案，移除不易理解的英文術語。

= 3.5.5 =

* 改善網域到期檢查資訊 Dashboard 呈現，改用 responsive card layout 避免小欄位控制台跑版。
* 限制完整資訊頁原始資料區塊寬度與換行，避免 RDAP / WHOIS raw data 撐破版面。

