Menghitung Kata, Karakter, dan Waktu Baca
Gambaran Umum
Video ini mengimplementasikan fitur utama plugin Word Count — menghitung jumlah kata, jumlah karakter, dan estimasi waktu baca, lalu menampilkannya di dalam konten post.
Filter the_content
php
function __construct() {
add_action('admin_menu', array($this, 'adminPage'));
add_action('admin_init', array($this, 'settings'));
add_filter('the_content', array($this, 'ifWrap'));
}Logic Utama: ifWrap()
php
function ifWrap($content) {
if (
is_main_query() AND
is_single() AND
(
get_option('wcp_wordcount', '1') OR
get_option('wcp_charcount', '1') OR
get_option('wcp_readtime', '1')
)
) {
return $this->createHTML($content);
}
return $content;
}Penjelasan Kondisi:
is_main_query()— Hanya pada query utama (bukan sidebar/widget)is_single()— Hanya pada halaman single post- Minimal satu checkbox aktif — Minimal salah satu fitur (word count, char count, read time) harus dicentang di settings
Method createHTML() — Membangun Output
php
function createHTML($content) {
$html = '<h3>' . esc_html(get_option('wcp_headline', 'Post Statistics')) . '</h3><p>';
// Hitung kata (digunakan untuk word count DAN read time)
if (get_option('wcp_wordcount', '1') OR get_option('wcp_readtime', '1')) {
$wordCount = str_word_count(strip_tags($content));
}
// Tampilkan Word Count
if (get_option('wcp_wordcount', '1')) {
$html .= 'This post has ' . $wordCount . ' words.<br>';
}
// Tampilkan Character Count
if (get_option('wcp_charcount', '1')) {
$html .= 'This post has ' . strlen(strip_tags($content)) . ' characters.<br>';
}
// Tampilkan Read Time
if (get_option('wcp_readtime', '1')) {
$html .= 'This post will take about ' . round($wordCount / 225) . ' minute(s) to read.<br>';
}
$html .= '</p>';
// Tentukan posisi tampilan (awal atau akhir post)
if (get_option('wcp_location', '0') == '0') {
return $html . $content; // Di awal post
}
return $content . $html; // Di akhir post
}Fungsi PHP yang Digunakan
str_word_count()
php
$wordCount = str_word_count(strip_tags($content));- Menghitung jumlah kata dalam string
strip_tags()menghapus semua HTML tags terlebih dahulu agar tag tidak dihitung sebagai kata
strlen()
php
$charCount = strlen(strip_tags($content));- Menghitung jumlah karakter dalam string
- Sama seperti di atas, hapus tags dulu dengan
strip_tags()
Kalkulasi Waktu Baca
php
$readTime = round($wordCount / 225);- 225 kata per menit — rata-rata kecepatan membaca manusia
round()— Membulatkan ke bilangan bulat terdekat- Hasil: estimasi menit yang dibutuhkan untuk membaca post
esc_html()
php
esc_html(get_option('wcp_headline', 'Post Statistics'))- Sanitasi output HTML untuk mencegah XSS attack
- Argumen ke-2 pada
get_option()adalah default value jika option belum ada di database
Display Location Logic
wcp_location = '0' → Statistik ditampilkan di AWAL post (sebelum konten)
wcp_location = '1' → Statistik ditampilkan di AKHIR post (setelah konten)Alur Kerja Lengkap
User membuka single post
→ WordPress memanggil filter 'the_content'
→ ifWrap() memeriksa kondisi (is_single, is_main_query, checkbox)
→ createHTML() menghitung statistik
→ str_word_count() untuk jumlah kata
→ strlen() untuk jumlah karakter
→ round(words / 225) untuk waktu baca
→ Output ditambahkan di awal atau akhir konten
→ Konten post + statistik ditampilkan ke user