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

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

  1. KISS

    KISS Active Member

    Рег.:
    Ноем 8, 2009
    Съобщения:
    790
    Харесвания:
    94
    Точки:
    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,794
    Харесвания:
    635
    Точки:
    113
    Пол:
    Мъж
    Място:
    Казанлък
    Чакам с нетърпение да видя какво "разширение" ще правите с това изискване.
     
  3. KISS

    KISS Active Member

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

    AMitrev Well-Known Member

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

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

    KISS Active Member

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

    AMitrev Well-Known Member

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

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

    hristonev Active Member

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

    KISS Active Member

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

    Blinky Owner

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

    Sky Well-Known Member

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

    Blinky Owner

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

    Blinky Owner

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

    Sky Well-Known Member

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

    Blinky Owner

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

    rombeca Active Member

    Рег.:
    Ноем 9, 2010
    Съобщения:
    944
    Харесвания:
    202
    Точки:
    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
    Съобщения:
    790
    Харесвания:
    94
    Точки:
    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,794
    Харесвания:
    635
    Точки:
    113
    Пол:
    Мъж
    Място:
    Казанлък
    А ако имаме woocomrce примерно да разбирам ли, че при продуктите няма да замени думата със линк?
     
  18. KISS

    KISS Active Member

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

    Sky Well-Known Member

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

    KISS Active Member

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

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

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