Unlimited Plugins, WordPress themes, videos & courses! Unlimited asset downloads! From $16.50/m
Advertisement
  1. Code
  2. Creative Coding
Code

Rewrite API: Dasar-Dasar

by
Length:LongLanguages:

Indonesian (Bahasa Indonesia) translation by ⚡ Rova Rindrata (you can also view the original English article)

Ini adalah bagian pertama dari rangkaian dua bagian yang melihat Rewrite API milik WordPress. Dalam tutorial ini kita melihat bagaimana rewrite bekerja dan metode dasar yang tersedia untuk membuat rewrite rules kustom.


Apa itu Rewriting?

WordPress, seperti semua sistem manajemen konten, menentukan konten apa yang akan ditampilkan berdasarkan variabel (biasanya disebut variabel kueri) yang diteruskan padanya. Misalnya: http://example.com/index.php?category=3 memberi tahu WordPress bahwa kita mencari posting dalam kategori dengan ID 3 dan http://example.com/index.php?feed=rss memberi tahu WordPress kita ingin umpan situs dalam format RSS.

Sayangnya, ini bisa membuat URL kita agak jelek:

Di sinilah langkah rewriting WordPress masuk. Memungkinkan kita untuk mengganti yang di atas dengan:

Yang sekarang tidak hanya jauh lebih mudah dibaca (dan mudah diingat) tapi juga lebih SEO friendly. Ini adalah singkatnya, apa yang dilakukan rewrite.


Bagaimana Cara Kerjanya?

Sekarang http://example.com/portoflio/wordpress/my-fancy-plugin tidak ada sebagai direktori atau file. Jadi bagaimana WordPress menyajikan konten yang benar? Saat WordPress menerima 'permalink cantik' seperti di atas, hal itu perlu dikonversikan menjadi sesuatu yang dia mengerti, yaitu objek kueri. Lebih sederhananya itu harus mengambil URL cantik, dan memetakan bagian yang sesuai ke variabel kueri yang benar. Jadi untuk contoh kita:

  • post_type diatur ke 'portfolio'
  • portfolio-taxonomy diatur ke 'wordpress'
  • portfolio diatur ke 'my-fancy-plugin' (nama posting)

Kemudian WordPress mengetahui bahwa kita mencari postingan 'portofolio' tipe, dalam term taksonomi 'wordpress' 'portfolio-taxonomy' dengan nama 'my-fancy-plugin'. (Seperti yang mungkin Anda duga dua yang pertama sebenarnya benar-benar berlebihan). WordPress kemudian melakukan kueri itu, memilih template yang sesuai untuk menampilkan hasilnya dan kemudian menyajikannya kepada pemirsa. Tapi jelas WordPress tidak hanya menebak bagaimana menafsirkan URL-nya, ini perlu diceritakan...

Ini Dimulai Dengan .htaccess

Dengan asumsi Anda dapat dan telah mengaktifkan permalink yang cantik di halaman Settings -> Permalinks Anda (lihat Codex untuk persyaratan minimum – untuk WordPress di server Nginx ada plug-in ini) – kemudian semuanya dimulai dengan file .htaccess. Ini memainkan peran sederhana namun signifikan. WordPress menyertakan sesuatu yang mirip dengan berikut di file ini:

Ini hanya memeriksa apakah file atau direktori benar-benar ada – dan jika memang demikian, Anda hanya dibawa kesana. Sebagai contoh:

Akan membawa Anda lampiran PNG 'my-picture.png'. Tapi, seperti dalam kasus:

Dimana direktori tidak ada – Anda dibawa ke file index.php WordPress Anda. Ini file yang melakukan boot WordPress.

Menafsirkan URL

Pada titik ini, WordPress belum tahu apa yang Anda cari. Setelah beberapa pemuatan awal WordPress dan pengaturannya, ia menjalankan metode parse_request kelas WP (ada di file class-wp.php). Metode inilah yang mengambil /portoflio/wordpress/my-fancy-plugin dan mengubahnya menjadi objek kueri yang dimengerti WordPress (hampir, itu benar-benar menetapkan array query_vars dan kemudian $wp->query_posts mengubahnya menjadi kueri).

Singkatnya, fungsi ini membandingkan URL yang diterima (/portoflio/wordpress/my-fancy-plugin) dengan sederet 'regular expressions'. Ini adalah array rewrite – dan akan terlihat seperti ini:

Kunci dari array ini adalah regular expressions, dan URL yang diterima dibandingkan terhadap masing-masing pada gilirannya sampai ada kecocokan dengan pola URL yang diterima. Nilai yang sesuai, adalah bagaimana URL tersebut kemudian ditafsirkan. Array $matches berisi nilai yang diambil (diindeks dari 1) dari pencocokan.

Misalnya, mengunjungi www.example.com/blog/tag/my-tag, WordPress akan mencari pola pertama yang cocok dengan 'tag/my-tag'. Dengan array di atas, cocok dengan pola ketiga: tag/([^/]+)/?$. Ini memberitahu WordPress untuk menafsirkan URL sebagai www.example.com/blog/index.php?tag=my-tag dan sejalan arsip 'my-tag' disajikan.

Tentu saja, WordPress memungkinkan Anda menyesuaikan array ini, dan sisa dari tutorial ini didedikasikan untuk menunjukkan caranya.


Menyesuaikan Rewrite Rules

Settings -> Permalinks

Panggilan pertama Anda haruslah halaman pengaturan 'Permalink'. Halaman ini memungkinkan Anda mengubah aturan untuk jenis posting 'post' default, dan taksonomi 'category' dan 'tags'. Opsi 'default' memiliki permalink cantik dinonaktifkan, namun Anda dapat memilih dari daftar struktur preset atau membuat struktur kustom. Harap perhatikan bahwa struktur kustom tidak boleh berisi URL situs Anda. WordPress memungkinkan Anda mengubah struktur permalink Anda dengan menambahkan tag yang disediakan seperti %postname% (nama posting), %year% (tahun posting diterbitkan) dan %author% (penulis posting). Struktur permalink seperti:

Akan menghasilkan link posting seperti:

Dokumentasi untuk opsi ini dapat ditemukan di WordPress Codex. (Kemudian saya akan menunjukkan cara membuat tag kustom Anda sendiri).

Namun pilihan yang disediakan cukup terbatas. Dalam tutorial ini saya akan fokus pada fungsi yang disediakan oleh WordPress yang menawarkan kontrol lebih besar terhadap struktur permalink dan bagaimana interpretasinya. Saya tidak akan membahas opsi rewrite yang tersedia untuk jenis posting kustom atau taksonomi, karena ini akan dibahas di bagian 2.

Mengapa Melakukan Flush Rewrite Rules?

Setelah ada perubahan pada rewrite rules (misalnya, dengan menggunakan salah satu dari metode berikut, atau mendaftarkan jenis posting kustom atau taksonomi), Anda mungkin mendapati bahwa peraturan baru tidak berlaku. Ini karena Anda perlu melakukan flush rewrite rules. Ini bisa dilakukan salah satu dari dua cara berikut:

  • Cukup kunjungi halaman Settings -> Permalink
  • Panggil flush_rewrite_rules() (dibahas di bagian 2)

Apa yang dilakukan hal ini? Ingat bahwa metode parse_request membandingkan permintaan terhadap array rewrite. Array ini berada di database. Melakukan flush rewrite rules memperbarui database untuk mencerminkan perubahan Anda – dan sampai Anda melakukannya, mereka tidak akan dikenali. Tapi parse_request juga menulis ke file .htaccess. Ini membuatnya menjadi operasi yang mahal. Jadi, walaupun saya tidak akan membahas penggunaan flush_rewrite_rules() sampai bagian 2, saya akan memberikan peringatan ini: Jangan panggil flush_rewrite_rules pada setiap pemuatan halaman.Plugin hanya boleh memanggil ini saat plug-in diaktifkan dan dinonaktifkan.

Menambahkan Rewrite Rule

add_rewrite_rule memungkinkan Anda menambahkan aturan tambahan pada array rewrite. Fungsi ini menerima tiga argumen:

  • rule – sebuah regular expression untuk membandingkan URL permintaan terhadapnya
  • rewrite – string kueri yang digunakan untuk menafsirkan aturan. Array $matches berisi kecocokan yang diambil dan dimulai dari indeks '1'.
  • position – 'top' atau 'bottom'. Tempat untuk menempatkan aturan: di bagian atas array rewrite atau bagian bawahnya. WordPress memindai dari atas array ke bawah dan berhenti segera setelah menemukan kecocokan. Agar aturan Anda diutamakan dari peraturan yang ada, Anda harus mengaturnya ke 'top'. Default adalah 'bottom'.

Catatan: jika Anda menggunakan add_rewrite_rule beberapa kali, masing-masing dengan posisi 'top' – panggilan pertama diutamakan daripada panggilan berikutnya.

Misalnya, posting kita memiliki tanggal acara yang terkait dengannya dan kami ingin memiliki struktur ini: www.example.com/blog/the-olympics-begin/2012-07-27 diinterpretasikan sebagai www.example.com/blog/index.php?postname=the-olympics-begin&eventdate=2012-07-27 maka kita bisa menambahkan aturan ini sebagai berikut:

Berikut ini akan menginterpretasikan www.example.com/olympics/2012/rowing sebagai www.example.com/index.php?p=17&olymyear=2012&game=rowing

Jika Anda tidak yakin akan regular expressions Anda, mungkin Anda akan menemukan pendahuluan ini dan alat ini berguna.

Menambahkan Tag Rewrite

Anda mungkin berpikir bahwa nilai eventdate (2012-07-27 pada contoh di atas), olymyear dan game dapat diakses dari internal WordPress melalui get_query_var (dengan cara yang sama dengan get_query_var('paged') mendapatkan nomor halaman Anda saat ini). Namun, WordPress tidak secara otomatis mengenali variabel eventdate meskipun diinterpretasikan sebagai variabel GET. Ada beberapa cara untuk membuat WordPress mengenali variabel kustom. Salah satunya adalah dengan menggunakan filter query_vars seperti yang ditunjukkan di bagian 'Menambahkan Endpoint Kustom' di bawah ini. Sebagai alternatif, kita bisa melangkah lebih jauh dan menggunakan add_rewrite_tag untuk mendaftarkan tag kustom seperti default %postname% dan %year%

Fungsi ini menerima tiga argumen:

  • tag name – (dengan awalan dan akhiran %) misalnya: %eventdate%
  • regex – Regular expression untuk memvalidasi nilainya, mis. '([0-9]{4}-[0-9]{2}-[0-9]{2})'
  • query – (opsional) Bagaimana tag ditafsirkan, mis. 'eventdate='. Jika disediakan, harus diakhiri dengan '='.

Tidak hanya get_query_var('eventdate') akan mengembalikan nilai tanggal di URL, namun Anda dapat menggunakan tag %eventdate% di Settings -> Permalink (bersama dengan default %year%, %postname% dll.) dan WordPress akan menafsirkannya dengan benar. Sayangnya saat membuat permalink posting, WordPress tidak tahu bagaimana cara mengganti %eventdate% dengan nilai yang sesuai: jadi permalink posting kita berakhir seperti:

Kita perlu mengganti %eventdate% dengan nilai yang sesuai, dan kita bisa melakukannya dengan menggunakan filter post_link. (Dalam contoh ini, saya akan berasumsi bahwa nilainya disimpan dalam field kustom 'eventdate').

Pada bagian 2 dari seri ini saya akan membahas tag kustom untuk jenis posting kustom.

Menambahkan Endpoint Kustom

Endpoint adalah tag yang ditambahkan ke URL (/trackback/[nilai] adalah yang paling umum). Ini memiliki beberapa kegunaan potensial lainnya: menampilkan berbagai template, bergantung pada kumpulan nilai, pemberitahuan kustom, dan penayangan posting dalam berbagai 'format' (dapat dicetak, XML, JSON dll.).

Anda dapat membuat endpoint dengan add_rewrite_endpoint. Fungsi ini menerima dua argumen:

  • name – Nama endpoint mis. 'json', 'form', dll.
  • where – Mask endpoint menentukan di mana endpoint harus ditambahkan. Ini harus menjadi salah satu konstanta EP_* yang tercantum di bawah ini (atau kombinasi dengan menggunakan operator bitwise). Saat Anda mendaftarkan jenis posting kustom Anda dapat membuat mask untuk jenis posting tersebut:

Mask endpoint default adalah:

  • EP_PERMALINK – untuk permalinks posting
  • EP_ATTACHMENT – untuk lampiran
  • EP_DATE – untuk arsip tanggal
  • EP_YEAR – untuk arsip tahun
  • EP_MONTH – untuk arsip bulan
  • EP_DAY – untuk arsip 'hari'
  • EP_ROOT – untuk root situs
  • EP_COMMENTS – untuk komentar
  • EP_SEARCH – untuk pencarian
  • EP_CATEGORIES – untuk kategori
  • EP_TAGS – untuk tag
  • EP_AUTHORS – untuk arsip posting penulis
  • EP_PAGES – untuk halaman
  • EP_ALL – untuk semuanya

Endpoint sangat fleksibel, Anda dapat menggunakannya dengan operator bitwise jadi, misalnya, Anda dapat menambahkan endpoint untuk permalink posting dan halaman dengan EP_PERMALINK | EP_PAGES.

Sebagai contoh singkat, endpoint bisa berguna untuk pengiriman formulir. Misalkan kita memiliki halaman formulir kontak dengan nama contact-form dan dengan permalink: www.example.com/contact dan ingin URL-nya:

  • www.example.com/contact/submission/success – untuk mencerminkan penyerahan formulir yang berhasil
  • www.example.com/contact/submission/error – untuk mencerminkan penyerahan formulir yang tidak berhasil

Hal ini bisa dilakukan dengan endpoint. Berikut ini adalah contoh sederhana bagaimana menggunakan endpoint, dan formulirnya sangat mendasar dalam pengecekannya (dan sebenarnya tidak melakukan apapun dengan data). Biasanya formulir seperti ini akan bekerja paling baik dalam plug-in, menggunakan shortcode – tapi untuk keperluan contoh ini, buat halaman dengan template berikut dan kode lainnya yang bisa Anda masukkan ke dalam functions.php Anda.

(Jika Anda bertanya-tanya, honey mengacu pada metode dasar penangkapan spam yang diuraikan di sini. Ini jelas bukan fool proof, namun pemrosesan formulir dan perlindungan spam yang benar tidak ada topiknya di sini). Sekarang kita menciptakan endpoint kita:

Selanjutnya kita menambahkan variabel 'form' ke array variabel yang dikenali:

Akhirnya kami menyediakan form handler, yang akan memproses data, menyerahkan formulir, dan kemudian mengarahkan kembali ke halaman kontak dengan nilai endpoint yang relevan ditambahkan.

Tentu saja contoh ini bisa sangat ditingkatkan dengan memberikan pesan kesalahan yang lebih rinci yang menyampaikan alasan kegagalan.

Menambahkan Feed Kustom

Dengan permalink yang cantik, WordPress secara otomatis menghasilkan URL cantik untuk feed situs Anda: www.example.com/feed/rss. Fungsi add_feed memungkinkan Anda membuat feed kustom, yang jika permalink cantik diaktifkan, juga akan memiliki URL 'cantik'. Fungsi ini menerima dua argumen:

  • feed name – Nama feed seperti yang akan muncul di feed/[feed-name]
  • feed callback – Fungsi yang bertanggung jawab untuk menampilkan isi feed.

Berikut ini adalah contoh add_feed yang dimaksudkan, dan menyediakan feed kustom yang sangat mendasar.

Setelah melakukan flush permalink, feed akan tersedia di www.example.com/feed/events.


Memeriksa Rewrite Rules

Setelah Anda menambahkan beberapa rewrite rules Anda sendiri (dan melakukan flush pada mereka), Anda mungkin ingin memeriksa apakah mereka bekerja dengan benar – dan jika tidak, cari tahu apa yang salah. Untuk ini, saya sangat merekomendasikan plug-in Monkeyman Rewrite Analyzer, plug-in gratis yang tersedia di repositori WordPress. Setelah diaktifkan, plug-in ini menambahkan halaman ke bagian 'Tools' Anda, yang berisi daftar semua rewrite rules Anda.

Anda juga dapat menguji aturan dengan memberi contoh URL, dan plug-in akan memfilter aturan untuk hanya menampilkan pola yang sesuai dan menunjukkan bagaimana WordPress akan menafsirkan URL.

Bersenang-senanglah, dan awasi Bagian 2, segera hadir!

Harap diperhatikan: Saat ini ada bug di penyorot sintaks kami yang menampilkan "empty()" sebagai "emptyempty()". Jangan lupa menyesuaikan kode Anda.

Advertisement
Advertisement
Advertisement
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.