=== Flexi Recent Posts ===
Contributors: Mhd Wahyu NZ
Tags: recent posts, shortcode, posts, widget, flexible posts, custom posts display
Requires at least: 6.8
Tested up to: 6.8.2
Requires PHP: 8.0
Stable tag: 2.4.0
License: GPLv2 or later
License URI: https://www.gnu.org/licenses/gpl-2.0.html
Donate link: https://mwahyunz.id/

Menampilkan daftar tulisan terbaru secara fleksibel di mana saja menggunakan shortcode dengan atribut yang dapat disesuaikan.

== Description ==

Flexi Recent Posts memberikan Anda kemudahan untuk menampilkan daftar tulisan terbaru di halaman, tulisan, atau widget mana pun menggunakan shortcode `[flexiposts]` yang sederhana. Keunggulan utama plugin ini adalah fleksibilitasnya; Anda dapat mengontrol hampir setiap elemen yang ditampilkan—mulai dari judul, gambar, kutipan, hingga metadata tulisan—langsung dari atribut shortcode. Plugin ini dirancang agar ringan dan efisien dengan memanfaatkan WordPress Transient API untuk caching, sehingga tidak membebani server Anda. Dengan beberapa mode tampilan dan opsi kustomisasi yang kaya, Anda dapat menyesuaikan output agar selaras dengan desain situs web Anda.

Fitur Utama:
* **Shortcode Sederhana**: Cukup gunakan `[flexiposts]` untuk memulai.
* **Kustomisasi Penuh**: Atribut yang mudah digunakan untuk menampilkan/menyembunyikan judul, gambar, tanggal, penulis, kategori, tag, dan kutipan.
* **Tiga Mode Tampilan**: Pilih tata letak dengan gambar di kiri, kanan, atau atas.
* **Ukuran Gambar Fleksibel**: Atur lebar gambar unggulan dalam satuan piksel atau gunakan lebar persentase default.
* **Efisien**: Menggunakan sistem cache untuk memastikan performa yang cepat.
* **Styling Modern**: Dilengkapi dengan CSS bawaan yang bersih dan modern, namun mudah untuk di-override.
* **Aman & Teroptimasi**: Keamanan ditingkatkan dengan validasi input dan query database yang dioptimalkan.
* **Standar Modern**: Kompatibel dengan WordPress 6.8+ dan PHP 8.0+.

== Installation ==

1.  **Melalui Dashboard WordPress (Cara Termudah)**:
    * Buka menu `Plugins > Add New`.
    * Cari "Flexi Recent Posts".
    * Klik `Install Now`, lalu `Activate`.
2.  **Melalui Upload di Dashboard WordPress**:
    * Unduh file `.zip` plugin Flexi Recent Posts.
    * Buka menu `Plugins > Add New` dan klik tombol `Upload Plugin`.
    * Pilih file `.zip` yang sudah diunduh, lalu klik `Install Now`.
    * Aktifkan plugin setelah instalasi selesai.
3.  **Melalui FTP (Cara Manual)**:
    * Ekstrak file `.zip` plugin.
    * Unggah folder `flexi-posts` ke direktori `/wp-content/plugins/` di server Anda.
    * Buka menu `Plugins` di dashboard WordPress dan aktifkan plugin "Flexi Recent Posts".

Setelah aktivasi, gunakan shortcode `[flexiposts]` di editor tulisan atau halaman Anda.

== Shortcode and Attributes ==

Gunakan shortcode dasar `[flexiposts]` atau tambahkan atribut di dalamnya untuk menyesuaikan tampilan.

**Contoh Dasar**:
`[flexiposts]`

**Contoh Lanjutan**:
`[flexiposts mode="3" number="5" imagesize="300" cat="0" author="0" more="1"]`

---

### Daftar Atribut yang Tersedia

* `mode`
    Menentukan mode tata letak tampilan.
    **Nilai**: `1` (gambar kiri), `2` (gambar kanan), `3` (gambar atas).
    **Default**: `1`

* `number`
    Jumlah tulisan terbaru yang akan ditampilkan (1-100).
    **Nilai**: Angka (integer).
    **Default**: `3`

* `image`
    Menampilkan atau menyembunyikan gambar unggulan (featured image).
    **Nilai**: `1` (tampil), `0` (sembunyi).
    **Default**: `1`

* `imagesize`
    Menentukan lebar gambar unggulan dalam satuan piksel (0-2000). **Atribut ini diabaikan jika `mode="3"` digunakan.**
    Jika `0`, lebar akan diatur secara otomatis (30% untuk mode 1&2, 100% untuk mode 3).
    **Nilai**: Angka (integer).
    **Default**: `100`

* `title`
    Menampilkan atau menyembunyikan judul tulisan.
    **Nilai**: `1` (tampil), `0` (sembunyi).
    **Default**: `1`

* `excerpt`
    Menampilkan atau menyembunyikan kutipan (excerpt) tulisan.
    **Nilai**: `1` (tampil), `0` (sembunyi).
    **Default**: `1`

* `limit`
    Membatasi jumlah karakter dalam kutipan (1-1000).
    **Nilai**: Angka (integer).
    **Default**: `80`

* `more`
    Menampilkan atau menyembunyikan tautan "Read more »" di akhir kutipan.
    **Nilai**: `1` (tampil), `0` (sembunyi).
    **Default**: `0`

* `cat`
    Menampilkan atau menyembunyikan kategori tulisan.
    **Nilai**: `1` (tampil), `0` (sembunyi).
    **Default**: `1`

* `tag`
    Menampilkan atau menyembunyikan tag tulisan.
    **Nilai**: `1` (tampil), `0` (sembunyi).
    **Default**: `1`

* `author`
    Menampilkan atau menyembunyikan nama penulis.
    **Nilai**: `1` (tampil), `0` (sembunyi).
    **Default**: `1`
    
* `authorlink`
    Mengaktifkan atau menonaktifkan tautan pada nama penulis ke halaman arsipnya.
    **Nilai**: `1` (aktif), `0` (nonaktif).
    **Default**: `1`

* `date`
    Menampilkan atau menyembunyikan tanggal publikasi tulisan.
    **Nilai**: `1` (tampil), `0` (sembunyi).
    **Default**: `1`

== Frequently Asked Questions ==

* **Bagaimana cara mengubah warna dan gaya font?**
    Anda dapat menimpa (override) gaya CSS bawaan plugin dengan menambahkan kode CSS Anda sendiri melalui menu `Appearance > Customize > Additional CSS` di dashboard WordPress Anda. Gunakan class selector seperti `.frp-item`, `.frp-title a`, atau `.frp-terms a` untuk menargetkan elemen tertentu.

* **Apakah plugin ini mendukung Custom Post Types?**
    Untuk saat ini, versi 2.4.0 hanya dirancang untuk menampilkan tulisan standar ('post'). Dukungan untuk Custom Post Types mungkin akan dipertimbangkan pada pembaruan di masa mendatang.

* **Apakah shortcode bisa digunakan di widget?**
    Ya, Anda bisa menambahkan shortcode `[flexiposts]` di dalam widget "Text" atau "HTML Kustom" pada halaman widget Anda.

* **Apa saja persyaratan minimal?**
    WordPress 6.8 atau lebih tinggi dan PHP 8.0 atau lebih tinggi diperlukan untuk keamanan dan performa optimal.

== Screenshots ==

1. Tampilan default (Mode 1) dengan gambar di sebelah kiri.
2. Contoh tampilan Mode 2 dengan gambar di sebelah kanan.
3. Contoh tampilan Mode 3 dengan gambar di atas tulisan.
4. Tampilan daftar tulisan tanpa gambar unggulan (`image="0"`).

== Changelog ==

= 2.4.0 - 2025-11-17 =
* Keamanan: Peningkatan validasi dan sanitasi input untuk semua atribut shortcode.
* Keamanan: Menambahkan validasi rentang untuk atribut numerik (number: 1-100, limit: 1-1000, imagesize: 0-2000).
* Keamanan: Meningkatkan keamanan query database dengan prepared statement yang tepat.
* Keamanan: Menambahkan validasi komprehensif untuk eksistensi taksonomi dan objek term.
* Keamanan: Meningkatkan validasi objek post sebelum diproses.
* Performa: Optimasi WP_Query dengan `no_found_rows` dan `update_post_meta_cache` untuk performa lebih baik.
* Performa: Meningkatkan penghapusan transient untuk mendukung sistem object cache.
* Performa: Menambahkan nomor versi pada cache key untuk auto-invalidate saat update.
* Kompatibilitas: Menambahkan persyaratan eksplisit WordPress 6.8+ dan PHP 8.0+.
* Peningkatan: Menambahkan konstanta plugin (FRP_VERSION, FRP_PLUGIN_DIR, FRP_PLUGIN_URL).
* Peningkatan: Menambahkan cleanup saat plugin dinonaktifkan untuk menghapus transient.
* Peningkatan: Menambahkan hook untuk 'trashed_post' dan 'untrashed_post' untuk flush cache.
* Kualitas Kode: Meningkatkan dokumentasi kode dan type safety.
* Kualitas Kode: Menghapus assignment variabel yang tidak perlu dan meningkatkan logic flow.

= 2.3.0 - 2025-09-22 =
* Peningkatan: Pada `mode="3"`, atribut `imagesize` sekarang diabaikan untuk memberlakukan lebar gambar 100% secara konsisten.
* Perbaikan: Menghapus margin bawah yang tidak perlu pada gambar di `mode="3"` untuk memastikan jarak vertikal yang seragam antar semua elemen.
* Teknis: Memperbarui versi plugin dan file CSS.

= 2.2.0 - 2025-09-21 =
* Peningkatan: Mengoptimalkan ukuran gambar yang dimuat. Plugin sekarang menggunakan ukuran 'thumbnail' untuk mode 1 & 2, dan ukuran 'medium' untuk mode 3 untuk meningkatkan efisiensi dan kualitas visual.
* Teknis: Memperbarui versi plugin di file header.

= 2.1.0 - 2025-09-20 =
* Fitur: Menambahkan atribut `more` untuk menampilkan tautan "Read more »" di akhir kutipan.
* Perbaikan: Logika tautan "Read more »" tidak lagi terikat pada atribut `title`, melainkan dikontrol oleh atribut `more`.
* Perbaikan: Mengubah nilai default untuk atribut `imagesize` dari `0` menjadi `100`.
* Dokumentasi: Memperbarui deskripsi atribut `limit` untuk memperjelas bahwa batasan berdasarkan jumlah karakter, bukan kata.
* Dokumentasi: Memperbarui header dan daftar atribut di file readme.txt.

= 2.0.0 - 2025-09-19 =
* Fitur: Shortcode utama diubah menjadi `[flexiposts]` untuk kemudahan.
* Fitur: Menambahkan atribut `imagesize` untuk mengatur lebar gambar unggulan secara kustom.
* Fitur: Tautan pada kategori, tag, dan nama penulis sekarang terbuka di tab baru.
* Fitur: Menambahkan tautan "Read More »" secara otomatis ke kutipan jika judul disembunyikan.
* Perbaikan: Gambar unggulan tidak lagi ditautkan ke halaman tulisan untuk mencegah perilaku hover yang tidak diinginkan.
* Gaya: Perombakan total pada file CSS untuk skema warna, tata letak, dan jarak antar elemen yang baru.
* Struktur: Refactoring kode pada file `frp-display.php` untuk meningkatkan keterbacaan dan mengimplementasikan logika tampilan baru.

= 1.0.0 =
* Rilis awal.

== Upgrade Notice ==

= 2.4.0 =
Update keamanan dan performa yang besar. Peningkatan validasi input, optimasi query database, dan kompatibilitas yang lebih baik dengan WordPress 6.8+ dan PHP 8.0+. Direkomendasikan untuk semua pengguna.