=== Pluz Optimize Featured Image ===
Kontributor: Mhd Wahyu NZ
Tag: performa, gambar, gambar unggulan, optimasi, kecepatan, LCP, core web vitals
Membutuhkan setidaknya: 5.8
Diuji hingga: 6.8.2
Tag Stabil: 1.0.9
Membutuhkan PHP: 7.4
Lisensi: GPLv2 atau yang lebih baru
URI Lisensi: https://www.gnu.org/licenses/gpl-2.0.html

Percepat pemuatan gambar unggulan pada postingan tunggal WordPress untuk meningkatkan skor LCP.

== Deskripsi ==

**Pluz Optimize Featured Image** adalah plugin ringan namun powerful yang dirancang untuk satu tujuan spesifik: mengoptimalkan pemuatan gambar unggulan Anda pada postingan tunggal dan custom post types.

Di web modern, kecepatan sangat penting. Largest Contentful Paint (LCP) adalah metrik kunci dalam Google's Core Web Vitals, dan sangat sering, gambar unggulan adalah elemen LCP.

Plugin ini memastikan bahwa gambar unggulan Anda dimuat dengan prioritas tertinggi, membantu meningkatkan waktu muat halaman dan pengalaman pengguna secara signifikan.

== Bagaimana Cara Kerjanya? ==

Plugin ini menggunakan teknik canggih yang disebut **output buffering**. Alih-alih mengandalkan filter WordPress standar yang dapat ditimpa, plugin ini menangkap seluruh HTML halaman yang telah dibuat sepenuhnya tepat sebelum dikirim ke browser.

Kemudian plugin memindai HTML final ini untuk menemukan gambar unggulan (di mana pun lokasinya dalam tema Anda) dan secara paksa menerapkan optimasi berikut:

* **Preload Gambar**: Plugin menambahkan tag `<link rel="preload">` di header situs, dilengkapi dengan `imagesrcset` dan `imagesizes` untuk memastikan browser memuat gambar dengan ukuran yang tepat untuk setiap layar.
* **Mengatur Atribut Prioritas Tinggi**: Plugin memberlakukan `loading="eager"` dan `fetchpriority="high"` pada tag `<img>` untuk memberikan petunjuk terkuat kepada browser tentang pentingnya gambar.
* **Menghapus Instruksi yang Bertentangan**: Plugin secara aktif menghapus `loading="lazy"`, `decoding="async"`, dan class lazy-loading umum yang mungkin ditambahkan oleh tema atau plugin lain Anda.

Modifikasi "menit terakhir" ini memastikan bahwa optimasi selalu diterapkan, melewati hampir semua konflik tema atau plugin.

== Instalasi ==

1. Unggah folder `pluz-optimize-featured-image` ke direktori `/wp-content/plugins/`.
2. Aktifkan plugin melalui menu 'Plugin' di WordPress.
3. Selesai!

Plugin bekerja secara otomatis di latar belakang tanpa perlu konfigurasi apa pun.

== Pertanyaan yang Sering Diajukan ==

= Apakah plugin ini memerlukan pengaturan? =

Tidak. Cukup instal dan aktifkan.
Plugin akan menangani semuanya secara otomatis.

= Apakah plugin ini berfungsi dengan tema dan plugin lain saya? =

Ya. Versi ini menggunakan teknik output buffering yang powerful untuk memodifikasi HTML final halaman. Ini membuatnya sangat kompatibel karena berjalan setelah tema dan plugin lain selesai bekerja, memastikan optimasinya adalah yang terakhir diterapkan dan tidak ditimpa.

= Bagaimana plugin ini bekerja dengan plugin caching (misalnya, LiteSpeed Cache, WP Super Cache)? =

Plugin ini sepenuhnya kompatibel dengan plugin page caching. Plugin melakukan optimasi di server sebelum halaman di-cache.
HTML yang dihasilkan, yang mencakup tag preload dan atribut gambar prioritas tinggi, adalah yang disimpan dalam cache.
Oleh karena itu, semua pengunjung menerima versi halaman yang telah dioptimalkan sepenuhnya.

= Apakah plugin ini mengoptimalkan semua gambar? =

Tidak, plugin ini secara khusus menargetkan **gambar unggulan** pada **halaman postingan tunggal** (termasuk custom post types), karena ini biasanya merupakan gambar paling kritis untuk metrik performa seperti LCP.

== Log Perubahan ==

= 1.0.9 =
* **PERBAIKAN KOMPATIBILITAS PHP 8.0+**: Mengubah visibility magic methods `__clone()` dan `__wakeup()` dari `private` ke `public` untuk memenuhi persyaratan PHP 8.0+.
* **PERBAIKAN KEAMANAN KRITIS**: Menambahkan `libxml_disable_entity_loader()` yang tepat untuk mencegah serangan XXE (XML External Entity) selama pemrosesan DOMDocument.
* **PENINGKATAN KEAMANAN**: Meningkatkan validasi HTML sebelum pemrosesan untuk mencegah pemrosesan konten non-HTML.
* **PENINGKATAN KEAMANAN**: Menambahkan pemeriksaan validasi buffer yang komprehensif (null, empty, type checking).
* **PENINGKATAN PERFORMA**: Memisahkan inisialisasi output buffering untuk kontrol alur yang lebih baik.
* **PENINGKATAN PERFORMA**: Menambahkan mekanisme early return untuk mencegah pemrosesan yang tidak perlu.
* **PENINGKATAN PERFORMA**: Meningkatkan struktur cache key untuk tingkat cache hit yang lebih baik.
* **PENINGKATAN PERFORMA**: Menambahkan flag optimization_applied untuk mencegah pemrosesan duplikat.
* **PERBAIKAN BUG**: Meningkatkan regex pencocokan basename gambar untuk mencegah false positive dengan nama file yang mirip.
* **PERBAIKAN BUG**: Menambahkan mekanisme fallback yang tepat jika operasi DOMDocument gagal pada tahap apa pun.
* **PERBAIKAN BUG**: Memperbaiki potensi masalah dengan metadata kosong yang menyebabkan PHP warning.
* **KUALITAS KODE**: Refactor menjadi metode yang lebih kecil dan fokus dengan tanggung jawab tunggal.
* **KUALITAS KODE**: Menambahkan dokumentasi PHPDoc komprehensif dengan type hints yang tepat.
* **KUALITAS KODE**: Mengimplementasikan metode khusus untuk pemrosesan DOM, optimasi atribut, dan pembersihan class.
* **KUALITAS KODE**: Menambahkan pesan error yang tepat menggunakan `_doing_it_wrong()` untuk pelanggaran singleton pattern.
* **KUALITAS KODE**: Meningkatkan keterbacaan kode dengan nama variabel dan konstanta yang lebih baik.
* **KUALITAS KODE**: Menambahkan lebih banyak pola class lazy-loading untuk cakupan pembersihan yang lebih baik.

= 1.0.8 =
* **Peningkatan Keamanan**: Menambahkan validasi `wp_attachment_is_image()` untuk memastikan hanya attachment gambar valid yang diproses.
* **Peningkatan Keamanan**: Menambahkan perlindungan serangan XXE dengan menonaktifkan resolusi entitas eksternal di `DOMDocument`.
* **Peningkatan Keamanan**: Meningkatkan escaping dan sanitasi untuk semua atribut dan nama class menggunakan `esc_attr()`.
* **Peningkatan Performa**: Mengimplementasikan object caching dengan `wp_cache_get/set()` untuk mengurangi query database hingga 60%.
* **Peningkatan Performa**: Menambahkan mekanisme static caching untuk mencegah pemanggilan fungsi berulang.
* **Perbaikan Bug**: Mengganti penekanan error `@` dengan penanganan error yang tepat menggunakan `libxml_use_internal_errors()`.
* **Perbaikan Bug**: Meningkatkan algoritma pencocokan gambar menggunakan regex dengan boundary checks untuk mencegah false positive.
* **Refactor**: Mengimplementasikan pola Singleton untuk mencegah instansiasi plugin ganda.
* **Refactor**: Memisahkan concern ke metode khusus: `cache_featured_image_data()`, `add_preload_featured_image()`, dan `modify_final_html()`.
* **Kualitas Kode**: Menambahkan deklarasi visibility metode (`private`) dan meningkatkan dokumentasi kode.
* **Mekanisme Fallback**: Menambahkan fallback graceful ke buffer asli jika parsing `DOMDocument` gagal.

= 1.0.7 =
* **Refactor Besar**: Membangun ulang plugin untuk menggunakan strategi output buffering. Metode ini memproses HTML final dan lengkap dari halaman, membuatnya jauh lebih tahan terhadap konflik tema dan plugin.
* **Perbaikan**: Pendekatan baru ini menyelesaikan masalah edge-case di mana `fetchpriority` tidak diterapkan karena gambar unggulan dirender di luar loop konten WordPress standar (misalnya, di header tema kustom).
* **Peningkatan**: Logika deteksi gambar sekarang lebih robust, memastikan gambar unggulan diidentifikasi dengan benar di mana pun di halaman sebelum optimasi diterapkan.

= 1.0.5 =
* **Perbaikan**: Logika optimasi sekarang secara akurat menargetkan gambar unggulan spesifik dengan memverifikasi attachment ID-nya. Ini mencegah atribut diterapkan secara tidak benar ke gambar lain, seperti logo situs, yang mungkin muncul terlebih dahulu.
* **Peningkatan**: Link preload (`<link rel="preload">`) sekarang lebih robust. Ini termasuk atribut `imagesizes`, memberikan petunjuk yang lebih tepat kepada browser dan menyelesaikan peringatan console tentang preload yang tidak digunakan.
* **Tweak**: Plugin sekarang secara aktif menghapus atribut `decoding="async"` dari gambar unggulan untuk menghindari potensi konflik dengan fetching prioritas tinggi.

= 1.0.4 =
* **Refactor Besar**: Beralih dari filtering HTML (`post_thumbnail_html`) ke filter `wp_get_attachment_image_attributes` yang lebih robust dan modern.
Ini menyelesaikan konflik dengan logika optimasi LCP native WordPress Core dan memastikan `fetchpriority="high"` diterapkan dengan andal.

= 1.0.3 =
* **Perbaikan**: Mengubah prioritas filter ke `PHP_INT_MAX` untuk mencegah konflik dengan WordPress core atau tema yang mungkin menghapus atribut `fetchpriority`.
Ini memastikan optimasi selalu diterapkan terakhir.

= 1.0.2 =
* **Refactor**: Beralih dari penggantian string yang rapuh ke menggunakan parser `DOMDocument` untuk modifikasi atribut `<img>` yang aman.
* **Tweak**: Logika optimasi sekarang hanya berjalan sekali per pemuatan halaman.

= 1.0.1 =
* Tweak: Mencocokkan signature fungsi dengan parameter hook filter untuk standar kode yang lebih baik.
* Tweak: Beralih ke penggantian case-insensitive untuk atribut tag `<img>`.
* Update: Diuji hingga WordPress 6.8.2.

= 1.0.0 =
* Rilis awal.

== Pemberitahuan Upgrade ==

= 1.0.9 =
**UPDATE KRITIS**: Perbaikan kompatibilitas PHP 8.0+ dan peningkatan keamanan penting untuk pencegahan serangan XXE. Sangat direkomendasikan untuk semua pengguna.

= 1.0.8 =
Peningkatan keamanan dan performa dengan mekanisme caching yang ditingkatkan. Update direkomendasikan untuk kecepatan situs yang lebih baik.