← アップデート情報一覧に戻る
Eio WP Expansion v1.0.2 アップデート情報
新機能
目次の自動生成
投稿本文の見出しタグ(H2〜H6)から目次を自動生成し、記事内に挿入する機能を追加しました。
- 5つのデザインテーマ: ライト、ダーク、ブルー、グリーン、カスタムカラーから選択可能
- 柔軟な挿入位置: 最初の見出しの前、最初の段落の後、コンテンツの先頭、ショートコード
[toc]による手動配置 - 投稿タイプごとの制御: 目次を表示する投稿タイプを管理画面で選択可能
- 投稿単位の非表示: 編集画面のメタボックスから個別の投稿で目次を非表示に設定可能
- サイドバーウィジェット: 「目次(EWE)」ウィジェットでサイドバーにも目次を表示可能
- 開閉ボタン、番号付け、最小見出し数の設定に対応
日本語最適化(WP Multibyte Patch相当)
日本語WordPressサイトに必要なマルチバイト文字処理を6機能追加しました。WP Multibyte Patchの代替として使用できます。
- 抜粋の文字数ベース切り詰め: 単語数ではなく
mb_substrで文字数ベースの抜粋を生成 - コメント抜粋のマルチバイト対応: コメント抜粋にも文字数ベースの切り詰めを適用
- エディターの文字数カウント: 単語数の代わりに文字数を表示
- フィードXMLサニタイズ: 不正なXML制御文字を自動削除
- メールUTF-8エンコード: Content-Type charset=UTF-8 を保証
- 検索クエリの全角スペース変換: 全角スペースを半角に変換して正しく検索
重要な改善
ライセンスモデルの変更
プラグインの全機能がライセンスの有無に関わらず常に動作するようになりました。
- ライセンスが制御するのは自動アップデートとメールサポートのみ
- ライセンス未認証でも全10カテゴリ・50以上の機能がそのまま利用可能
- ライセンスの有効期限が切れても機能が停止することはありません
ターム順序管理の安定性向上
カテゴリー・タグの並び替え機能を大幅に改善しました。
- カスタム順序を設定していないタームが一覧から消える問題を修正(
INNER JOIN→LEFT JOIN+COALESCE) - 管理画面でのドラッグ&ドロップ結果がリロード後も維持されるよう修正
- WooCommerceなど他プラグインの並び順指定との競合を解消
- REST API経由のGutenbergカテゴリセレクターでSQL構文エラーが発生する問題を修正
投稿順序管理の安定性向上
- 管理画面での並び替え結果がリロード後も維持されるよう修正
- WooCommerceの価格ソートなど、他プラグインの並び順指定との競合を解消
- ドラッグ操作の500msデバウンス処理を追加(高速操作時のAJAX競合を防止)
画像最適化の信頼性向上
- 大容量画像(50MB超)処理時のメモリ不足を事前チェックで防止
- 同時リクエストによるメタデータ破損をトランジェントベースのロック機構で防止
- PNG圧縮レベルの設定が正しく反映されるよう修正
- EXIF削除設定のON/OFFが正しく反映されるよう修正
- 一括最適化の統計情報が正しく集計されるよう修正
メンテナンスモードの改善
- カウントダウンタイマーのタイムゾーン処理をUTCベースに統一
- カウントダウンのON/OFF設定が正しく反映されるよう修正
- REST API・RSSフィード・XMLサイトマップもメンテナンスモード中はブロック対象に
- シークレットキーのURLパラメータ名の不一致を修正
JavaScriptのモダン化
post-order.js、term-order.js を最新のJavaScript記法に更新しました。
- オブジェクト短縮メソッド、アロー関数、テンプレートリテラル、
let宣言を採用 - 通知のメモリリークを修正(タイマーコールバックの適切なクリア)
セキュリティ強化
本バージョンでは、包括的なセキュリティ監査を実施し、以下の脆弱性に対処しました。
- SVG XXE対策:
loadXML()にLIBXML_NONETフラグを追加し、外部エンティティ参照によるSSRFを防止 - SVGサニタイズ強化:
<style>、<embed>、<object>、<iframe>、<animate>タグを危険タグリストに追加。イベントハンドラの大文字・小文字検出も対応 - タイミング攻撃対策: メンテナンスモードのシークレットキー比較を
hash_equals()に変更 - Nonce値のサニタイズ: 5箇所の
wp_verify_nonce()呼び出しにsanitize_text_field(wp_unslash())を追加 - XSS対策: jQuery
.html()を.text()/.append()+document.createTextNode()に変更(3箇所) - オープンリダイレクト対策:
wp_redirect()をwp_safe_redirect()に統一 - Cookie セキュリティ:
httponly、secure、samesiteフラグを追加 - IPアドレス詐称対策: プロキシヘッダー(
X-Forwarded-For)のデフォルト信頼を廃止し、REMOTE_ADDRのみ使用 - バックアップインポート保護: サニタイズコールバックのバイパスを防止、ファイルサイズ制限(5MB)・値サイズ制限(1MB)・ネスト深度制限(5階層)を追加
- Secret Key 生成強化:
Math.random()をcrypto.getRandomValues()に変更 - SQLインジェクション対策:
$wpdb->prepare()の適用漏れを修正
バグ修正
コア機能
- カスタムログインURL設定時に
/wp-adminアクセスでカスタムURLがアドレスバーに漏洩する問題を修正 - カスタムログインURLの緊急リカバリ定数
EWE_DISABLE_CUSTOM_LOGINが実装されていなかった問題を修正 REQUEST_URIのサニタイズでsanitize_text_field()がURLエンコーディングを破壊する問題を修正- ログイン試行制限で最大試行回数に0を設定可能だった問題を修正(最小値1を強制)
- ライセンス未認証時にプラグイン機能がすべてブロックされる問題を修正
- 404リダイレクト処理で存在しない
/404パスにリダイレクトしてループする問題を修正 - REST API制限でライセンスAPIルート
/eio-lm/がブロックされる問題を修正
メンテナンスモード
- カウントダウン機能が完全に動作しない問題を修正(オプション名の不一致)
- ソーシャルリンクが表示されない問題を修正(オプション名の不一致)
- 見出し色の設定が反映されない問題を修正
- 背景色のデフォルト値がテンプレートと不一致だった問題を修正
- シークレットキーのURLパラメータ名が管理画面と実装で異なる問題を修正
- Coming SoonモードでREST APIレスポンスのステータスコードが誤っていた問題を修正
- 存在しない
maintenance-admin.jsをエンキューしていた問題を修正
メディア管理
- 一括圧縮のAJAXハンドラが重複登録されていた問題を修正
- 画像圧縮の失敗が常に成功と報告される問題を修正
- メイン画像の最適化メタデータが保存されない問題を修正
- PNG圧縮でJPEG用のAPIを使用していた問題を修正
- 画像バックアップファイルがアップロードディレクトリに公開状態で保存される問題を修正(システムtempディレクトリに変更)
- メモリチェックで
memory_limit = -1(無制限)の場合にロジックが破綻する問題を修正 - WebP作成時にメモリチェックが行われない問題を修正
- 添付ファイルページのリダイレクト先URLが取得できない場合のフォールバック処理を追加
copy()失敗時にtempファイルが残留する問題を修正- バックアップ設定のエクスポートに画像最適化関連の7オプションが含まれていない問題を修正
コンテンツ補助
- 目次の番号付けクラスが生成関数に渡されない問題を修正
- 見出しテキストにドル記号(
$100等)が含まれる場合に目次HTMLが破損する問題を修正 - テーブルのレスポンシブラッパーが二重に適用される問題を修正
- iframeラッパーの変数スコープバグによる無限ループの可能性を修正
- プロトコル相対URL(
//example.com)が外部リンクとして認識されない問題を修正 get_the_ID()がループ外で false/0 を返す場合の処理を追加- 目次スクリプトがページ内に複数回出力される問題を修正
管理画面カスタマイズ
- 文字数カラムのソートで投稿が表示されなくなる問題を修正
- サムネイルカラムの出力エスケープ漏れを修正
- クイック編集でPOST値の
wp_unslash()が漏れていた問題を修正 - クイック編集のhidden spanが不足し値が正しく読み込めない問題を修正
- 権限チェックでロール名を使用していた問題をケイパビリティに修正
EWE_Admin_Customizeクラスがフロントエンドでも読み込まれる問題を修正get_post()の戻り値がnullの場合のエラーハンドリングを追加
クリーンアップ
- ウィジェット無効化がタイミング問題で機能しない問題を修正(
widgets_initがinit:1で実行されるため) - WordPress 3.8で削除済みのダッシュボードウィジェットIDを参照していた問題を修正
- コメント無効化で遅延登録されるカスタム投稿タイプが対象外になる問題を修正(
init:10→init:100)
日本語最適化
mb_strlen()がHTMLエンティティを展開前にカウントする問題を修正- 抜粋の切り詰めでHTMLタグが表示される問題を修正
$moreパラメータの出力エスケープ漏れを修正
並び替え機能
- ターム並び替えのSQLクエリで
ORDER BYが二重に付与される問題を修正 - ターム並び替えのJOINエイリアスが同一リクエスト内で重複する問題を修正
- タームのper-page取得で
wp_optionsを参照していた問題を修正(wp_usermetaに変更) - テーマの
orderby => term_order指定が反映されない問題を修正 - term-order.js のタクソノミープレフィックスがハードコードされていた問題を修正
- ドラッグ操作のAJAX送信でPOST配列の型チェックが欠如していた問題を修正
セキュリティ機能
- ログイン試行データが単一オプションに全IP分蓄積されるパフォーマンス問題を修正(IP単位のトランジェントに変更)
- ログイン試行のクリーンアップCronが未登録だった問題を修正
- ログイン試行ログの表示がデータ構造変更に追従していない問題を修正
バックアップ・エクスポート
- エクスポートの
Content-Dispositionヘッダーでファイル名が引用符で囲まれていない問題を修正 - インポート時に
is_uploaded_file()チェックが欠如していた問題を修正 - バックアップページの権限チェック漏れを修正
- Nonce参照時の
isset()チェック漏れを修正(PHP 8警告対策) uninstall.phpでライセンス関連オプション・画像最適化メタデータの削除漏れを修正
通知・CSS
- 並び替え成功通知がモバイルの管理バーに隠れる問題を修正(top位置調整)
- テーブルラッパーCSSの
position: relative欠落を修正 - 通知のタイマーコールバックがクリアされずメモリリークする問題を修正
PHP 8.x 互換性
- POST配列の型チェック漏れによるTypeErrorを修正
get_post()のnull戻り値によるFatal Errorを修正- 未定義配列キーの警告を修正
コード品質
- PHPStan Level 6: エラー0件を達成(364件のベースライン管理)
- WordPress Coding Standards: PHPCS + WPCS 3.3.0 による準拠チェックを導入
- JavaScriptのモダン化(var→let、アロー関数、テンプレートリテラル、オブジェクト短縮メソッド)
- nonce検証の標準化
- ライセンスSDKの
date()をwp_date()に変更(WordPressタイムゾーン対応)
動作環境
- PHP: 8.0 〜 8.3
- WordPress: 6.0 以上
アップデート方法
WordPress管理画面の「プラグイン」→「更新」からアップデートできます。ライセンスが有効なサイトでは自動更新通知が届きます。