🧩
Веб-сайт

WordPress учун махсус плагин яратиш: header, hook ва shortcode билан амалий қўлланма

04.12.2025
← Барча мақолалар

WordPress миллионлаб сайтларнинг асосини ташкил этади ва унинг энг кучли томони — кенгайтирилувчанлигидир. Сайтингизга янги имконият қўшмоқчи бўлганингизда одатда тайёр плагин қидирасиз, лекин ҳар доим ҳам аниқ керакли функцияни бажарадиган тайёр ечим топилавермайди. Баъзида мавжуд плагинлар ҳаддан ортиқ оғир, кераксиз функциялар билан тўла ёки сизнинг махсус бизнес мантиғингизга тўғри келмайди. Айнан шу пайтда ўз плагинингизни ёзиш энг тўғри йўл бўлади — чунки у фақат сизга керак бўлган ишни бажаради, енгил бўлади ва тўлиқ назоратингизда қолади.

Ўз плагинингизни ёзишнинг яна бир муҳим сабаби — кодни мавзудан (theme) ажратиб қўйишдир. Агар функционалликни мавзу файлларига ёзсангиз, мавзуни ўзгартирганингизда ҳамма нарса йўқолади. Плагинда ёзилган код эса мавзудан мустақил ишлайди ва сайт дизайнини алмаштирсангиз ҳам сақланиб қолади. Бу профессионал ёндашув ҳисобланади ва WordPress ҳамжамияти томонидан тавсия этилади. Қуйида плагиннинг тузилмасидан бошлаб уни синаш ва тарқатишгача бўлган бутун жараённи амалий код мисоллари билан кўриб чиқамиз.

Плагин тузилмаси ва асосий файл headeri

WordPress плагини wp-content/plugins/ папкасида жойлашади. Энг оддий плагин битта PHP файлдан иборат бўлиши мумкин, лекин яхши амалиёт — ҳар бир плагин учун алоҳида папка яратишдир. Масалан, wp-content/plugins/sayt-uz-tools/ папкасини яратиб, ичига sayt-uz-tools.php асосий файлини жойлаштирасиз. WordPress плагинни таниб олиши учун бу файлнинг бошида махсус изоҳ блокини — плагин headerini ёзиш шарт. Айнан шу header WordPress админ панелидаги плагинлар рўйхатида кўринадиган маълумотларни белгилайди.

<?php
/**
 * Plugin Name: Sayt UZ Tools
 * Plugin URI:  https://sayt.uz/plugins/sayt-uz-tools
 * Description: Custom shortcodes and admin settings.
 * 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 камида Plugin Name бўлиши шарт — қолган майдонлар ихтиёрий, лекин уларни тўлдириш профессионал кўриниш беради. Энг охиридаги ABSPATH текшируви жуда муҳим: у файлга тўғридан-тўғри браузер орқали киришни тўсиб қўяди ва кодни фақат WordPress ядроси орқали ишга туширилишини таъминлайди. Бу хавфсизликнинг биринчи қадами бўлиб, ҳар бир плагин файлида бўлиши керак.

Hook тизими: action ва filter

WordPress кенгайтирилувчанлигининг юраги — hook тизимидир. Hooklar икки турга бўлинади: action ва filter. Action — бу WordPress иш жараёнининг маълум бир нуқтасида сизнинг кодингизни ишга тушириш имконини беради, масалан, саҳифа юкланганда ёки пост сақланганда бирор амал бажариш. Filter эса — маълумотни экранга чиқишидан олдин ўзгартириш имконини беради, масалан, пост матнини кўрсатишдан аввал унга қўшимча контент қўшиш. Тушуниш учун оддий қоида: action бирор ишни бажаради, filter эса маълумотни ўзгартиради ва албатта қиймат қайтаради.

// Action misoli: footer'ga matn qo'shish
function sayt_uz_footer_text() {
    echo '<p style="text-align:center">Built by Sayt.uz</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?</p>';
    }
    return $content;
}
add_filter( 'the_content', 'sayt_uz_append_notice' );

Бу мисолда add_action WordPress'га "footer чизилаётганда менинг функциямни чақир" деб айтади, add_filter эса "пост матнини кўрсатишдан олдин уни менинг функциямдан ўтказ" деб буюради. Filter функцияси ҳар доим ўзгартирилган қийматни қайтариши шарт — агар return қилмасангиз, пост матни бўш чиқиб қолади. Бу энг кўп учрайдиган хатолардан бири, шунинг учун filterлар билан ишлаганда доим қайтариладиган қийматни эслаб туринг.

Амалий плагин: shortcode ва админ саҳифа

Энди ҳақиқий фойдали нарса яратамиз. Shortcode — бу пост ёки саҳифага [sayt_button] каби оддий ёзув қўйиб, ўрнига тўлиқ HTML чиқарадиган механизм. Бу контент муҳаррирларига код ёзмасдан мураккаб элементларни қўшиш имконини беради. Қуйидаги мисолда биз созланадиган тугма чиқарадиган shortcode яратамиз, унда матн ва ҳавола параметр сифатида узатилади.

function sayt_uz_button_shortcode( $atts ) {
    $atts = shortcode_atts( array(
        'text' => 'Contact',
        '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' );

Энди муҳаррир ҳар қандай постга [sayt_button text="Buyurtma" url="/order"] деб ёзса, чиройли тугма пайдо бўлади. Эътибор беринг, биз esc_html ва esc_url функцияларидан фойдаландик — бу чиқаётган маълумотни тозалайди ва XSS ҳужумларидан ҳимоя қилади. Фойдаланувчидан келган ҳар қандай маълумотни экранга чиқаришдан олдин шундай тозалаш WordPress хавфсизлигининг олтин қоидасидир.

Плагинларга кўпинча созлама саҳифаси керак бўлади. Админ менюсига янги бўлим қўшиш учун admin_menu hookidan фойдаланамиз ва созламаларни сақлаш учун nonce ҳамда sanitization қўллаймиз.

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>';
}

Энг яхши амалиётлар: префикс ва хавфсизлик

Плагин ёзишда энг муҳим қоидалардан бири — барча функция, ўзгарувчи ва созлама номларига нодир префикс қўйишдир. Юқоридаги мисолларда биз sayt_uz_ префиксидан фойдаландик. Бунинг сабаби шундаки, WordPress сайтида ўнлаб плагинлар бир вақтда ишлайди ва агар икки плагинда бир хил номли функция бўлса, сайт бутунлай ишдан чиқади. Префикс бу низоларнинг олдини олади ва кодингизни бошқа плагинлардан ажратиб туради.

Хавфсизлик бўйича учта тамойилни доим эслаб туринг. Биринчидан, фойдаланувчидан келган ҳар қандай маълумотни сақлашдан олдин sanitize_text_field каби функциялар билан тозаланг. Иккинчидан, экранга чиқаришдан олдин esc_html, esc_url ёки esc_attr билан экранлаш қилинг. Учинчидан, ҳар қандай формада nonce ишлатинг — wp_nonce_field билан яратинг ва check_admin_referer билан текширинг. Nonce — бу сўровнинг ҳақиқатан ҳам сизнинг сайтингиздан келганини тасдиқловчи махсус токен бўлиб, CSRF ҳужумларидан ҳимоя қилади.

Фаоллаштириш, синаш ва тарқатиш

Плагинни фаоллаштириш ва ўчиришда махсус амаллар бажариш керак бўлиши мумкин, масалан маълумотлар базасида жадвал яратиш ёки стандарт созламаларни ўрнатиш. Бунинг учун register_activation_hook ва register_deactivation_hook функцияларидан фойдаланилади. Плагинни ёзиб бўлгач, уни WordPress админ панелининг "Плагинлар" бўлимидан фаоллаштиринг ва хато хабарлари чиқмаганини текширинг. Синаш давомида WP_DEBUG режимини ёқиб қўйинг, шунда барча PHP огоҳлантиришлари кўринади ва кодни мукаммаллаштиришга ёрдам беради.

Плагинингиз тайёр ва ишончли бўлгач, уни тарқатишингиз мумкин. Энг оддий йўл — папкани ZIP архивга жойлаш ва WordPress админ панелининг "Плагин юклаш" функцияси орқали ўрнатиш. Агар плагинни кенг жамоатчиликка тақдим этмоқчи бўлсангиз, уни WordPress.org расмий каталогига юборишингиз мумкин — бу ерда код GPL лицензияси ва хавфсизлик талабларига жавоб бериши текширилади. Ўз плагинингизни ёзиш кўникмаси сизни оддий WordPress фойдаланувчисидан ҳақиқий дастурчига айлантиради ва сайтингизга чексиз имкониятлар эшигини очади.

Ўхшаш мақолалар

🌾 Қишлоқ хўжалиги ва агро сайти: маҳсулотлар каталоги ❤️ Хайрия фонди сайти: шаффоф ва ишонч 🎉 Тўйxона ва банкет зали сайти: бирон қилиш 🚙 Автомобил ижара сайти: каталог ва бирон
🌐 Тил
🇺🇿 O'zbek 🇺🇿 Ўзбек 🇷🇺 Русский 🇬🇧 English