Skip to content

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:

  1. is_main_query() — Hanya pada query utama (bukan sidebar/widget)
  2. is_single() — Hanya pada halaman single post
  3. 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