1. This site uses cookies. By continuing to use this site, you are agreeing to our use of cookies. Learn more.

Как да правим Wordpress разширения: Уроци за начинаещи

Дискусията в 'Скриптове и CMS-и' стартирана от KISS, Дек 15, 2016.

  1. KISS

    KISS Active Member

    Рег.:
    Ноем 8, 2009
    Съобщения:
    789
    Харесвания:
    93
    Точки:
    28
    Здравейте.

    Дойде ми идеята и желанието да публикувам от време на време кратки уроци за създаване на Wordpress разширения (плъгини). Та да видим ще има ли интерес.

    Какво е нужно да знаете преди да започнете?

    - HTML
    - CSS
    - JavaScript (и евентуално малко jQuery)
    - PHP
    - MySQL
    - Английски език
    - Работа с WordPress (естествено)

    Принципно ще можете да направите някакво разширение и само с HTML и PHP, но не ви препоръчвам да започвате да се занимавате с това ако не разбирате от горните неща.

    Какво ще представляват уроците?

    Ще бъдат по-кратки и няма да бъдат изчерпателни. Няма как тази тема да ви е единствения ресурс за учене.

    Ще ви покажа някои неща и ще давам линк към страници с повече информация. Поне това е планът, пък ще видим какво ще стане.

    Урок 1: Създаване и качване на файл за Wordpress разширение

    Създайте си една папка на име my-plugin и в нея създайте php файл на име my-plugin.php. Във файла поставете следния код:

    PHP:
    <?php

    /*
    Plugin Name: Моето разширение
    Plugin URI: http://example.com/
    Description: Това е описанието на моето разширение.
    Author: Киро и Спиро
    Version: 1.0.0
    Author URI: http://example.com/
    */

    ?>
    Това са хедър данни за разширението, които сами се обясняват (ако знаете английски) и ще станат още по-ясни като видите разширението в сайта си.

    Запишете файла с кодировка UTF-8 without BOM за да работи кирилицата и качете папката в един Wordpress сайт в папка wp-content/plugins/. (Предполага се че имате хостинг, но ако нямате може да си сложите на компютъра готов Wordpress).

    Влезте в админ панела на сайта и вижте вашето разширение в списъка с разширения. Браво! Направихте първото си разширение, което прави абсолютно нищо :).

    Повече информация за хедър данните: https://developer.wordpress.org/plugins/the-basics/header-requirements/

    Толкова като за първи урок.
    Поздрави.
     
    ops5, mid, bluefighter и още 1 човек харесват това.
  2. Sky

    Sky Well-Known Member

    Рег.:
    Юли 29, 2012
    Съобщения:
    8,550
    Харесвания:
    583
    Точки:
    113
    Пол:
    Мъж
    Място:
    Казанлък
    Чакам с нетърпение да видя какво "разширение" ще правите с това изискване.
     
  3. KISS

    KISS Active Member

    Рег.:
    Ноем 8, 2009
    Съобщения:
    789
    Харесвания:
    93
    Точки:
    28
    Ей такива неща общо взето: https://codex.wordpress.org/Class_Reference/wpdb
     
  4. AMitrev

    AMitrev Well-Known Member

    Рег.:
    Авг 6, 2012
    Съобщения:
    1,391
    Харесвания:
    180
    Точки:
    63
    Пол:
    Мъж
    Място:
    София
    Как това да си кликач ти помага в разработката на каквото и да било?

    Windows-а явно ти е изял знанията, това не се прави заради кирилицата.
     
  5. KISS

    KISS Active Member

    Рег.:
    Ноем 8, 2009
    Съобщения:
    789
    Харесвания:
    93
    Точки:
    28
    До тук добре, само хейт за сега :D. Ами кирилицата не се показва правилно ако е ANSI, така че аз за това го правя.
     
  6. AMitrev

    AMitrev Well-Known Member

    Рег.:
    Авг 6, 2012
    Съобщения:
    1,391
    Харесвания:
    180
    Точки:
    63
    Пол:
    Мъж
    Място:
    София
    Хайт? Къде видя хейт.

    Какво е utf-8. Под ANSI предполагам визираш енкодинга cp1252, защото ANSI се позлва за default енкодинга, който може да бъде cp1251 (кирилица).
     
  7. hristonev

    hristonev Active Member

    Рег.:
    Авг 5, 2016
    Съобщения:
    415
    Харесвания:
    174
    Точки:
    43
    Пол:
    Мъж
    @KISS темата е добра.
     
    Последно редактирано: Дек 15, 2016
    cross харесва това.
  8. KISS

    KISS Active Member

    Рег.:
    Ноем 8, 2009
    Съобщения:
    789
    Харесвания:
    93
    Точки:
    28
    @hristonev
    Благодаря. Идеята е принципно само аз да публикувам уроците, че иначе смятам ще стане голяма каша с много учители (всеки с неговите си кодове и стилове на програмиране и без да се следва обща последователност, хората ще се объркат доста). Естествено ако сгреша нещо, ме поправяйте.
     
    hristonev харесва това.
  9. Blinky

    Blinky Owner

    Рег.:
    Апр 12, 2006
    Съобщения:
    22,503
    Харесвания:
    1,428
    Точки:
    113
    Пол:
    Мъж
    Професия:
    Dev
    Място:
    Sofia
    Е бате, ти къде ще пишеш? :) Най малкото настройки трябва да се помнят. :)
     
  10. Sky

    Sky Well-Known Member

    Рег.:
    Юли 29, 2012
    Съобщения:
    8,550
    Харесвания:
    583
    Точки:
    113
    Пол:
    Мъж
    Място:
    Казанлък
    Сериозен ли си?
     
  11. Blinky

    Blinky Owner

    Рег.:
    Апр 12, 2006
    Съобщения:
    22,503
    Харесвания:
    1,428
    Точки:
    113
    Пол:
    Мъж
    Професия:
    Dev
    Място:
    Sofia
    И на мен ми допада темата. Записвам се. ;)
     
    KISS харесва това.
  12. Blinky

    Blinky Owner

    Рег.:
    Апр 12, 2006
    Съобщения:
    22,503
    Харесвания:
    1,428
    Точки:
    113
    Пол:
    Мъж
    Професия:
    Dev
    Място:
    Sofia
    Що , някакъв виц ли казах?
     
  13. Sky

    Sky Well-Known Member

    Рег.:
    Юли 29, 2012
    Съобщения:
    8,550
    Харесвания:
    583
    Точки:
    113
    Пол:
    Мъж
    Място:
    Казанлък
    Ако си сериозен да.
     
  14. Blinky

    Blinky Owner

    Рег.:
    Апр 12, 2006
    Съобщения:
    22,503
    Харесвания:
    1,428
    Точки:
    113
    Пол:
    Мъж
    Професия:
    Dev
    Място:
    Sofia
    Еми не знам дали съм сериозен, но гледам, че някои не толкова сложни плъгини си инсъртват таблици...Явно и те на базик го правят. :)
     
  15. rombeca

    rombeca Active Member

    Рег.:
    Ноем 9, 2010
    Съобщения:
    928
    Харесвания:
    199
    Точки:
    43
    global $wpdb;

    $table_name = 'stupid_comments';

    $charset_collate = $wpdb->get_charset_collate();

    $sql = "CREATE TABLE $table_name (
    id mediumint(9) NOT NULL AUTO_INCREMENT,
    time datetime DEFAULT '0000-00-00 00:00:00' NOT NULL,
    autor tinytext NOT NULL,
    comment text NOT NULL,
    PRIMARY KEY (id)
    ) $charset_collate;";

    require_once( ABSPATH . 'wp-admin/includes/upgrade.php' );
    dbDelta( $sql );
     
    Blinky харесва това.
  16. KISS

    KISS Active Member

    Рег.:
    Ноем 8, 2009
    Съобщения:
    789
    Харесвания:
    93
    Точки:
    28
    Урок 2: Закачане за Wordpress куки и първият смислен плъгин

    Когато Wordpress изпълнява програмния си код, на множество места минава през куки (hooks), за които можем ние да се закачим и да добавим нашия код. Това става чрез двете Wordpress функции add_action() и add_filter(). Тези две функции са много важни и се използват непрестанно при създаване на разширения.

    В този урок ще направим малко разширение, което с помощта на add_filter() ще замени думата Google във всички публикации и страници в сайта с линка Google.

    Отворете файла my-plugin.php от Урок 1 и под коментара с хедър данните добавете този код:

    PHP:
    add_filter('the_content''my_google_link_function');

    function 
    my_google_link_function($content)
    {
        
    $new_content str_replace("Google""<a href='http://www.google.com'>Google</a>"$content);
        return 
    $new_content;
    }
    Първо извикваме add_filter() с 2 задължителни аргумента. Първият е името на куката, за която се закачаме - това е филтъра the_content (с него променяме съдържанието на публикации и страници). Вторият аргумент е името на нашата функция с нашия код.

    Нашата функция my_google_link_function(), както виждате има един аргумент. Този аргумент ни се дава от филтъра the_content. След като направим каквото ще правим, трябва да върнем една променлива със новото съдържание на поста или страницата.

    Какво трябва да върнем и колко аргумента имаме на разположение се определя от конкретната кука, която ползваме. Тоест филтъра the_content. Трябва да прочетем в неговата документация: https://codex.wordpress.org/Plugin_API/Filter_Reference/the_content

    Качете редактирания файл на разширението и го активирайте. Публикувайте страница или пост с думата Google някъде в текста и тя ще стане на линк (ако е включено разширението ви).

    Повече информация:
    Филтри: https://codex.wordpress.org/Plugin_API/Filter_Reference
    Функция add_filter(): https://developer.wordpress.org/reference/functions/add_filter/
    Филтър the_content: https://codex.wordpress.org/Plugin_API/Filter_Reference/the_content
     
  17. Sky

    Sky Well-Known Member

    Рег.:
    Юли 29, 2012
    Съобщения:
    8,550
    Харесвания:
    583
    Точки:
    113
    Пол:
    Мъж
    Място:
    Казанлък
    А ако имаме woocomrce примерно да разбирам ли, че при продуктите няма да замени думата със линк?
     
  18. KISS

    KISS Active Member

    Рег.:
    Ноем 8, 2009
    Съобщения:
    789
    Харесвания:
    93
    Точки:
    28
    Продуктите там реално са публикации от собствен тип на име product. То всъщност и страниците са публикации от тип page. Повече за видовете публикации: https://codex.wordpress.org/Post_Types
    Така че и в продуктите ще се замени, освен ако не добавим проверка за вида на публикацията.
     
  19. Sky

    Sky Well-Known Member

    Рег.:
    Юли 29, 2012
    Съобщения:
    8,550
    Харесвания:
    583
    Точки:
    113
    Пол:
    Мъж
    Място:
    Казанлък
    Друг шитав плъгин ме подсети и да похейтя малко:
    Заснемане.PNG
     
    KISS харесва това.
  20. KISS

    KISS Active Member

    Рег.:
    Ноем 8, 2009
    Съобщения:
    789
    Харесвания:
    93
    Точки:
    28
    Да, прав си. Откри бъг в плъгина :). Ако имаме вече такъв линк, думата ще стане втори линк в него. Но все пак няма го поправям това, тъй като то е свързано с PHP програмирането, а не с Wordpress програмирането. Идеята е просто да се види как се ползва филтъра.
     

Сподели страницата