WordPress millionlab saytlarning asosini tashkil etadi va uning eng kuchli tomoni โ kengaytiriluvchanligi. Saytingizga yangi imkoniyat qo'shmoqchi bo'lganingizda odatda tayyor plagin qidirasiz, lekin har doim ham aniq kerakli funksiyani bajaradigan tayyor yechim topilavermaydi. Ba'zida mavjud plaginlar haddan ortiq og'ir, keraksiz funksiyalar bilan to'la yoki sizning maxsus biznes mantig'ingizga to'g'ri kelmaydi. Aynan shu paytda o'z plaginingizni yozish eng to'g'ri yo'l bo'ladi โ chunki u faqat sizga kerak bo'lgan ishni bajaradi, yengil bo'ladi va to'liq nazoratingizda qoladi.
O'z plaginingizni yozishning yana bir muhim sababi โ kodni mavzudan (theme) ajratib qo'yishdir. Agar funksionallikni mavzu fayllariga yozsangiz, mavzuni o'zgartirganingizda hamma narsa yo'qoladi. Plaginda yozilgan kod esa mavzudan mustaqil ishlaydi va sayt dizaynini almashtirsangiz ham saqlanib qoladi. Bu professional yondashuv hisoblanadi va WordPress hamjamiyati tomonidan tavsiya etiladi. Quyida plaginning tuzilmasidan boshlab uni sinash va tarqatishgacha bo'lgan butun jarayonni amaliy kod misollari bilan ko'rib chiqamiz.
Plagin tuzilmasi va asosiy fayl headeri
WordPress plagini wp-content/plugins/ papkasida joylashadi. Eng oddiy plagin bitta PHP fayldan iborat bo'lishi mumkin, lekin yaxshi amaliyot โ har bir plagin uchun alohida papka yaratishdir. Masalan, wp-content/plugins/sayt-uz-tools/ papkasini yaratib, ichiga sayt-uz-tools.php asosiy faylini joylashtirasiz. WordPress plaginni tanib olishi uchun bu faylning boshida maxsus izoh blokini โ plagin headerini yozish shart. Aynan shu header WordPress admin panelidagi plaginlar ro'yxatida ko'rinadigan ma'lumotlarni belgilaydi.
<?php
/**
* Plugin Name: Sayt UZ Tools
* Plugin URI: https://sayt.uz/plugins/sayt-uz-tools
* Description: Sayt uchun maxsus qisqa kodlar va admin sozlamalari.
* Version: 1.0.0
* Author: Sayt UZ
* Author URI: https://sayt.uz
* License: GPL-2.0+
* Text Domain: sayt-uz-tools
*/
// To'g'ridan-to'g'ri kirishni taqiqlash
if ( ! defined( 'ABSPATH' ) ) {
exit;
}
Headerda kamida Plugin Name bo'lishi shart โ qolgan maydonlar ixtiyoriy, lekin ularni to'ldirish professional ko'rinish beradi. Eng oxiridagi ABSPATH tekshiruvi juda muhim: u faylga to'g'ridan-to'g'ri brauzer orqali kirishni to'sib qo'yadi va kodni faqat WordPress yadrosi orqali ishga tushirilishini ta'minlaydi. Bu xavfsizlikning birinchi qadami bo'lib, har bir plagin faylida bo'lishi kerak.
Hook tizimi: action va filter
WordPress kengaytiriluvchanligining yuragi โ hook tizimidir. Hooklar ikki turga bo'linadi: action va filter. Action โ bu WordPress ish jarayonining ma'lum bir nuqtasida sizning kodingizni ishga tushirish imkonini beradi, masalan, sahifa yuklanganda yoki post saqlanganda biror amal bajarish. Filter esa โ ma'lumotni ekranga chiqishidan oldin o'zgartirish imkonini beradi, masalan, post matnini ko'rsatishdan avval unga qo'shimcha kontent qo'shish. Tushunish uchun oddiy qoida: action biror ishni bajaradi, filter esa ma'lumotni o'zgartiradi va albatta qiymat qaytaradi.
// Action misoli: footer'ga matn qo'shish
function sayt_uz_footer_text() {
echo '<p style="text-align:center">Sayt.uz tomonidan ishlab chiqildi</p>';
}
add_action( 'wp_footer', 'sayt_uz_footer_text' );
// Filter misoli: post oxiriga eslatma qo'shish
function sayt_uz_append_notice( $content ) {
if ( is_single() ) {
$content .= '<p class="notice">Maqola yoqdimi? Ulashing!</p>';
}
return $content;
}
add_filter( 'the_content', 'sayt_uz_append_notice' );
Bu misolda add_action WordPress'ga "footer chizilayotganda mening funksiyamni chaqir" deb aytadi, add_filter esa "post matnini ko'rsatishdan oldin uni mening funksiyamdan o'tkaz" deb buyuradi. Filter funksiyasi har doim o'zgartirilgan qiymatni qaytarishi shart โ agar return qilmasangiz, post matni bo'sh chiqib qoladi. Bu eng ko'p uchraydigan xatolardan biri, shuning uchun filterlar bilan ishlaganda doim qaytariladigan qiymatni eslab turing.
Amaliy plagin: shortcode va admin sahifa
Endi haqiqiy foydali narsa yaratamiz. Shortcode โ bu post yoki sahifaga [sayt_button] kabi oddiy yozuv qo'yib, o'rniga to'liq HTML chiqaradigan mexanizm. Bu kontent muharrirlariga kod yozmasdan murakkab elementlarni qo'shish imkonini beradi. Quyidagi misolda biz sozlanadigan tugma chiqaradigan shortcode yaratamiz, unda matn va havola parametr sifatida uzatiladi.
function sayt_uz_button_shortcode( $atts ) {
$atts = shortcode_atts( array(
'text' => 'Bog\'lanish',
'url' => '#',
), $atts, 'sayt_button' );
$text = esc_html( $atts['text'] );
$url = esc_url( $atts['url'] );
return '<a class="sayt-btn" href="' . $url . '">' . $text . '</a>';
}
add_shortcode( 'sayt_button', 'sayt_uz_button_shortcode' );
Endi muharrir har qanday postga [sayt_button text="Buyurtma" url="/order"] deb yozsa, chiroyli tugma paydo bo'ladi. E'tibor bering, biz esc_html va esc_url funksiyalaridan foydalandik โ bu chiqayotgan ma'lumotni tozalaydi va XSS hujumlaridan himoya qiladi. Foydalanuvchidan kelgan har qanday ma'lumotni ekranga chiqarishdan oldin shunday tozalash WordPress xavfsizligining oltin qoidasidir.
Plaginlarga ko'pincha sozlama sahifasi kerak bo'ladi. Admin menyusiga yangi bo'lim qo'shish uchun admin_menu hookidan foydalanamiz va sozlamalarni saqlash uchun nonce hamda sanitization qo'llaymiz.
function sayt_uz_admin_menu() {
add_options_page(
'Sayt UZ Tools',
'Sayt UZ Tools',
'manage_options',
'sayt-uz-tools',
'sayt_uz_settings_page'
);
}
add_action( 'admin_menu', 'sayt_uz_admin_menu' );
function sayt_uz_settings_page() {
if ( isset( $_POST['sayt_uz_save'] ) &&
check_admin_referer( 'sayt_uz_settings', 'sayt_uz_nonce' ) ) {
$val = sanitize_text_field( $_POST['sayt_uz_title'] );
update_option( 'sayt_uz_title', $val );
echo '<div class="updated"><p>Saqlandi</p></div>';
}
$title = esc_attr( get_option( 'sayt_uz_title', '' ) );
echo '<div class="wrap"><h1>Sozlamalar</h1>';
echo '<form method="post">';
wp_nonce_field( 'sayt_uz_settings', 'sayt_uz_nonce' );
echo '<input type="text" name="sayt_uz_title" value="' . $title . '">';
echo '<input type="submit" name="sayt_uz_save" value="Saqlash" class="button-primary">';
echo '</form></div>';
}
Eng yaxshi amaliyotlar: prefiks va xavfsizlik
Plagin yozishda eng muhim qoidalardan biri โ barcha funksiya, o'zgaruvchi va sozlama nomlariga noyob prefiks qo'yishdir. Yuqoridagi misollarda biz sayt_uz_ prefiksidan foydalandik. Buning sababi shundaki, WordPress saytida o'nlab plaginlar bir vaqtda ishlaydi va agar ikki plaginda bir xil nomli funksiya bo'lsa, sayt butunlay ishdan chiqadi. Prefiks bu nizolarning oldini oladi va kodingizni boshqa plaginlardan ajratib turadi.
Xavfsizlik bo'yicha uchta tamoyilni doim eslab turing. Birinchidan, foydalanuvchidan kelgan har qanday ma'lumotni saqlashdan oldin sanitize_text_field kabi funksiyalar bilan tozalang. Ikkinchidan, ekranga chiqarishdan oldin esc_html, esc_url yoki esc_attr bilan ekranlash qiling. Uchinchidan, har qanday formada nonce ishlating โ wp_nonce_field bilan yarating va check_admin_referer bilan tekshiring. Nonce โ bu so'rovning haqiqatan ham sizning saytingizdan kelganini tasdiqlovchi maxsus token bo'lib, CSRF hujumlaridan himoya qiladi.
Faollashtirish, sinash va tarqatish
Plaginni faollashtirish va o'chirishda maxsus amallar bajarish kerak bo'lishi mumkin, masalan ma'lumotlar bazasida jadval yaratish yoki standart sozlamalarni o'rnatish. Buning uchun register_activation_hook va register_deactivation_hook funksiyalaridan foydalaniladi. Plaginni yozib bo'lgach, uni WordPress admin panelining "Plaginlar" bo'limidan faollashtiring va xato xabarlari chiqmaganini tekshiring. Sinash davomida WP_DEBUG rejimini yoqib qo'ying, shunda barcha PHP ogohlantirishlari ko'rinadi va kodni mukammallashtirishga yordam beradi.
Plaginingiz tayyor va ishonchli bo'lgach, uni tarqatishingiz mumkin. Eng oddiy yo'l โ papkani ZIP arxivga joylash va WordPress admin panelining "Plagin yuklash" funksiyasi orqali o'rnatish. Agar plaginni keng jamoatchilikka taqdim etmoqchi bo'lsangiz, uni WordPress.org rasmiy katalogiga yuborishingiz mumkin โ bu yerda kod GPL litsenziyasi va xavfsizlik talablariga javob berishi tekshiriladi. O'z plaginingizni yozish ko'nikmasi sizni oddiy WordPress foydalanuvchisidan haqiqiy dasturchiga aylantiradi va saytingizga cheksiz imkoniyatlar eshigini ochadi.