Panduan untuk hook WordPress
Diterbitkan: 2021-07-19Sistem kait bisa tampak menakutkan bagi yang belum tahu, tetapi itu adalah salah satu hal terbaik tentang WordPress. Panduan ini akan membantu Anda memahami dasar-dasar hook dan cara menggunakannya, memberikan contoh penggunaan dan saran lebih lanjut.

Kenapa harus menggunakan kail?
Jika Anda belum mengetahuinya, adalah ide yang sangat buruk untuk mengubah file inti di WordPress (WP). Selain risiko keamanan, perubahan Anda akan ditimpa setiap kali Anda memperbarui WP! Hal yang sama berlaku untuk plugin dan tema.
Tentu, Anda dapat melacak setiap pembaruan dan menerapkan kembali perubahan Anda. Anda juga bisa melubangi sarang lebah untuk mendapatkan madunya. Ini mungkin tampak nyaman tetapi Anda mungkin akan tersengat cepat atau lambat.
Sederhananya, Anda harus menggunakan pengait karena pengait mengimbangi risiko perubahan fungsi inti .
Dalam hal ini pentingnya kait tidak dapat dilebih-lebihkan . Mereka adalah kunci untuk ekstensibilitas WP dan landasan ekosistem plugin dan temanya. Anda akan menghemat banyak sakit kepala dengan mempelajari dasar-dasar dan memanfaatkannya dengan baik.
Apakah mereka?
Anda dapat menganggap kait sebagai peristiwa yang terjadi di seluruh urutan pemuatan WP. Ketika WP menemukan sebuah hook, WP akan mengaktifkan semua fungsi yang terpasang pada hook itu sebelum melanjutkan.
Dengan demikian Anda dapat memanfaatkan kait untuk menambahkan fungsionalitas atau mengubah variabel di seluruh WP . Anda dapat menggunakan kait yang ada dan menambahkan yang baru. Anda dapat melepas kait yang tidak Anda perlukan. Anda dapat melakukan pukulan yang sama lebih dari sekali, dengan memprioritaskan setiap fungsi sesuai keinginan Anda. Ini adalah sistem yang sangat fleksibel, hanya dibatasi oleh kait apa yang tersedia dan data apa yang mereka buka.
Bagaimana mereka bekerja?
Anda menambahkan satu atau lebih fungsi ke sebuah kait. Fungsi lain juga dapat ditambahkan oleh tema, plugin, atau WP Anda sendiri. Saat WP memuat, ia akan menemukan pengait. Ia memeriksa daftar semua fungsi yang terkait dengan hook. WP menjalankan semua fungsi ini dalam urutan prioritas . Setelah selesai, ia melanjutkan memuat semuanya setelah hook.
Seperti apa rupa mereka?
Menambahkan fungsi ke hook terlihat seperti ini:
add_action( $hook_name, $function_name, $priority, $arguments );
$hook_name adalah nama kail yang ingin Anda targetkan
$function_name adalah nama fungsi yang ingin Anda tambahkan ke kait itu
$ prioritas adalah sebuah integer yang menunjukkan $ function_name 's prioritas dalam $ hook_name' s antrian. Semakin rendah angkanya, semakin tinggi prioritasnya. Mulai dari 1, angka ini bisa setinggi yang Anda inginkan (dalam batas sistem) tetapi Anda tidak mungkin melihatnya lebih tinggi dari 40. Nilai defaultnya adalah 10.
$arguments adalah bilangan bulat yang menunjukkan jumlah argumen yang Anda gunakan dalam fungsi. Ini harus cocok dengan jumlah argumen yang diteruskan ke fungsi. Nilai defaultnya adalah 1.
Menghapus fungsi dari hook hampir sama:
remove_action( $hook_name, $function_name, $priority );
The function_name dan $ prioritas $ harus sesuai dengan nilai aslinya dari fungsi ADD_ACTIONsebagai yang sesuai, atau mereka tidak akan dihapus!
Jenis kait
Ada dua jenis utama kait: kait aksi dan kait filter . Mereka serupa dalam banyak hal – add_action() dan rekannya add_filter() keduanya dipanggil dengan cara yang sama. Perbedaannya ada pada fungsi yang Anda lewati:
// Jalankan beberapa kode
add_action( 'di mana_untuk_melakukan_sesuatu', 'melakukan_sesuatu');
fungsi do_the_thing() {
// Lakukan beberapa tindakan yang diperlukan untuk melakukan hal itu
}// Mengubah variabel
add_filter( 'barang_itu', 'ubah_barang');
fungsi change_the_thing( $hal ) {
// Filter $thing dan ubah ke apa pun yang Anda butuhkan, lalu…kembalikan $hal;
}
Perhatikan bahwa dalam contoh kedua, argumen pertama diteruskan ke functio n adalah nilai yang diubah. Argumen tambahan apa pun hanya untuk utilitas dan tidak diteruskan kembali melalui hook.
Anda mungkin telah memperhatikan bahwa saya meninggalkan $priority dan $arguments . Ini karena nilai default baik-baik saja. Jika membantu, hal di atas pada dasarnya sama dengan:
// Jalankan beberapa kode
add_action( 'di mana_untuk_melakukan_hal', 'melakukan_hal', 10, 1 );
// Mengubah variabel
add_filter( 'barang_itu', 'ubah_barang', 10, 1 );
Ini adalah contoh yang dibuat-buat tentu saja, tetapi mereka menggambarkan perbedaan utama antara keduanya: filter untuk mengubah variabel, tindakan untuk menambahkan kode.
Contoh yang kurang dibuat-buat
Katakanlah Anda ingin WP mengirim pemberitahuan email ketika pengguna baru mendaftar di situs Anda. Mengacu pada kodeks WP, Anda menemukan kait tindakan user_register . Ini memberi Anda variabel $user_id , yang dapat Anda gunakan untuk mendapatkan detail pengguna. wp_mail() menangani sisanya:
add_action( 'user_register', 'notify_on_user_registration' );
fungsi notify_on_user_registration( $user_id ) {// Dapatkan pengguna
$pengguna = get_user_by( 'id', $user_id );// Siapkan subjek dan isi email
$subjek = “Pendaftaran pengguna baru”;
$message = “Pengguna baru {$user->first_name} {$user->last_name} telah terdaftar.”;//Kirim email
wp_mail( '[email protected]', $subjek, $pesan );
}
Bagaimana jika Anda ingin mengarahkan pengguna ke halaman depan Anda saat login? Anda mencapai ini dengan mudah dengan kait login_redirect , yang menyediakan URL tujuan pengalihan pengguna secara default:

add_filter('login_redirect', 'redirect_user_on_login');
fungsi redirect_user_on_login( $redirect_to ) {
kembali home_url();
}
Segera setelah Anda menambahkan ini, Anda segera menyadari bahwa sebagai admin, Anda ingin dibawa langsung ke dasbor WP alih-alih beranda. Tidak masalah – Anda hanya mengubah pengait agar berfungsi hanya untuk admin:
add_filter( 'login_redirect', 'redirect_user_on_login', 10, 3 );
function redirect_user_on_login( $redirect_to, $request, $user ) {
// Ubah URL login kecuali pengguna adalah administrator
if ( isset( $user->roles ) && is_array( $user->roles ) ) {
if ( in_array( 'administrator', $user->roles ) ) {
kembalikan $redirect_to; // Redirect administrator ke default (admin area)
}
}kembalikan $redirect_to;
}
Perhatikan bahwa $priority dan $arguments telah ikut bermain!
Karena Anda memerlukan akses ke argumen ketiga hook untuk memeriksa level pengguna, Anda perlu menampilkan 3 argumen; Anda lulus nilai 3.
Nilai $priority dari 10 sama dengan default, tentu saja, tetapi ditentukan untuk mencapai nilai $arguments yang Anda butuhkan di atas.
Membuat kait Anda sendiri
Kekuatan untuk membuat kait khusus ada di tangan Anda! Fungsi yang disediakan oleh WP terlihat seperti ini:
do_action( $hook_name, $arg_1, $arg_2 … $arg_n );
apply_filters( $hook_name, $arg_1, $arg_2 … $arg_n );
Sekali lagi, mereka agak mirip. Kedua fungsi menerima nama – ini adalah tempat Anda memberi nama hook. Semua argumen berikut adalah argumen yang sama yang tersedia untuk fungsi yang Anda tambahkan ke kait itu. apply_filters() harus memiliki setidaknya satu argumen tambahan (argumen yang sedang difilter), tetapi yang lainnya opsional.
Misalnya, jika Anda ingin memasukkan skrip analitik tepat sebelum tag badan pembuka, tetapi tidak ingin mengubah header.php menjadi berantakan:
<?php do_action( 'sebelum_body_tag' ); ?;>
</head>
<tubuh>
Kemudian Anda dapat menambahkan skrip sebanyak yang Anda butuhkan:
add_action( 'before_body_tag', 'add_analytics_custom' );
fungsi add_analytics_custom() {
// tag <script> dan kode analitik buka di sini
}
apply_filters() bekerja sedikit berbeda. Seperti dibahas di atas, filter digunakan untuk mengubah nilai. Karena filter mengembalikan nilai, Anda menetapkan panggilan apply_filters() Anda ke variabel:
<?php $text = apply_filters( 'call_to_action_text', 'Tentang kami' ); ?>
<a href="<?php echo get_permalink( 'tentang' ); ?>” class=”tombol cta”>
<?php echo $teks; ?>
</a>// Atau, Anda dapat menggemakan hasil apply_filters() secara langsung
<a href="<?php echo get_permalink( 'tentang' ); ?>” class=”tombol cta”>
<?php echo apply_filters( 'call_to_action_text', 'Tentang kami' ); ?>
</a>
Kemudian Anda dapat memodifikasi variabel yang difilter seperlunya:
add_filter( 'call_to_action_text', 'change_call_to_action_text' );
fungsi change_call_to_action_text( $teks ) {
jika ( is_front_page() ) {
$text = 'Temukan lebih banyak';
}kembalikan $teks;
}
Kekurangannya
Tidak ada sistem yang sempurna, dan hook tidak terkecuali. Ketika datang ke kait inti, Anda biasanya harus puas dengan apa yang diberikan kepada Anda. Kadang-kadang Anda akan menghadapi situasi di mana kail tidak berada di tempat yang paling nyaman bagi Anda. Tidak banyak yang bisa dilakukan saat ini terjadi, jadi lihatlah sebagai peluang untuk menemukan solusi kreatif!
Juga, karena kait bisa ada di mana saja dalam struktur direktori WP, terkadang sulit untuk menemukan di mana logika tertentu terjadi. Ini dapat diimbangi dengan memisahkan kait fungsi Anda ke dalam file mereka sendiri.
Saran lebih lanjut
- Saat membuat fungsi untuk kait, pastikan namanya unik, jika tidak akan terjadi konflik. Hal yang sama berlaku untuk nama kait dan filter khusus Anda!
- Gunakan pengait untuk menjaga template Anda tetap rapi. Beberapa kait do_action() generik yang disisipkan di seluruh template Anda dapat membantu menjauhkan logika dari markup (hampir selalu merupakan ide yang bagus).
- Saat Anda memasang plugin baru, periksa pengait apa yang disediakannya dan pikirkan tentang bagaimana Anda dapat menggunakannya. Hal ini sangat berguna untuk kali tak terelakkan bahwa plugin tidak cukup melakukan apa yang Anda inginkan.
- Saat menambahkan tindakan atau filter, Anda dapat mengganti nama fungsi dengan fungsi itu sendiri. Ini dapat membantu menjaga tindakan dan filter tetap mandiri. Fungsi yang ditambahkan dengan cara ini tidak dapat dihapus menggunakan remove_action() atau remove_filter() , jadi berhati-hatilah!
add_action( 'di mana_untuk_melakukan_hal_hal', fungsi() {
echo 'Selesai.';
}, 10, 1 );
- Lihat fungsi terkait kait lain yang tersedia, seperti did_action() atau has_action() . Anda tidak pernah tahu kapan hanya menyadari mereka akan berguna.
Ringkasan
Menggunakan kail adalah masalah kebiasaan. Coba tanyakan pada diri sendiri dua pertanyaan sederhana kapan pun Anda mengerjakan proyek WP Anda:
- "Apakah ada pengait yang akan membuat ini lebih mudah bagi saya?"
- "Bisakah saya menambahkan pengait yang akan mempermudah saya di masa depan?"
Setelah Anda mendekati pengembangan WP dengan sikap ini, Anda akan menemukan banyak pintu terbuka.
Contoh dalam panduan ini adalah puncak gunung es. Ada ratusan pengait di inti WP saja, belum lagi perpustakaan besar plugin dan tema. Lihat referensi tindakan WP dan referensi filter untuk daftar lengkap kait WP inti.
Jika Anda memerlukan bantuan dengan Pengembangan Web Anda, jangan ragu untuk menghubungi kami.
