it-swarm.xyz

Цель Best Practices для разработки плагинов?

Создание сообщества вики для сборацельлучшие практики для разработки плагинов. Этот вопрос был вдохновлен комментариями @ EAMann к wp-хакерам .

Идея состоит в том, чтобы сотрудничать в том, какие объективные передовые практики могут быть, чтобы мы могли в конечном итоге использовать их в некотором процессе проверки сотрудничества сообщества.

ОБНОВЛЕНИЕ: После просмотра первых нескольких ответов становится ясно, что нам нужно иметь только одну идею/предложение/передовую практику для каждого ответа, и люди должны просмотреть список, чтобы убедиться, что нет дубликатов перед публикацией.

131
MikeSchinkel

Использовать действия и фильтры

Если вы думаете, что люди хотели бы добавить или изменить некоторые данные: предоставить apply_filters () перед возвратом .

Постскриптум Одна вещь, которую я нахожу немного разочаровывающей, - это то, что ваши вопросы - это процент плагинов, которые предназначены только для конечных пользователей, то есть не имеют собственных хуков. Представляете, если WordPress были разработаны как большинство плагинов? Это было бы негибким и очень нишевым решением.

Может быть, все было бы иначе, если бы у WordPress была возможность автоматически устанавливать плагины, от которых зависели другие плагины? Поскольку мне обычно приходится писать много функций, которые мне нужны, с нуля, потому что клиенты хотят вещи определенным образом и доступные плагины, а 90% там не позволяют мне гибко обновлять оставшиеся 10%.

Мне бы очень хотелось, чтобы те, кто возглавляет сообщество WordPress, нашли способ гарантировать, что плагины будут вознаграждены за следование лучшим рекомендациям (например, добавление хуков для других разработчиков), так же, как хорошие ответы вознаграждаются на сайте StackExchange.

Давайте возьмем пример из другой вопрос :

Пример: я хочу сделать что-то в своем плагине, когда кто-то ретвитит статью. Если бы в любом популярном плагине ретвита был пользовательский хук, к которому я мог подключиться и запустить, это было бы здорово. Нет, поэтому я могу изменить их плагин, чтобы включить его, но это работает только для моей копии, и я не хочу пытаться распространять это.

Связанные с

69
Arlen Beiler

Загрузка скриптов/CSS с помощью wp_enqueue_script и wp_enqueue_style

Плагины не должны загружать/пытаться загрузить дубликаты версий файлов JS/CSS, особенно jQuery и других файлов JS, включенных в WP Core.

Плагины всегда должны использовать wp_enqueue_script и wp_enqueue_style при связывании файлов JS и CSS и никогда напрямую через теги <script>.

Связанные с

53
Rick Curran

Поддержка I18n

Все выходные строки должны быть связаны с соответствующим текстовым доменом для обеспечения интернационализации заинтересованными сторонами, даже если разработчик не заинтересован в переводе своего собственного плагина.

Обратите внимание, что очень важно загружать языковые файлы во время действия init, чтобы пользователь мог подключиться к действию.

См. Кодекс: I18n для разработчиков WordPress

А также эта статья: Загрузка WP языковых файлов правильно .

Начиная с WordPress 4.6+

WP 4.6 изменил порядок загрузки и проверил расположение, это значительно облегчило работу разработчиков и пользователей.

Рассматривая плагин с текстовым доменом "my-plugin", WordPress теперь ПЕРВЫЙ будет искать файл перевода в:
/wp-content/languages/plugins/my-plugin-en_US.mo

Если он не может найти его там, он будет искать тот, где плагин скажет ему поискать (обычно в папке plugins 'language', если следует кодексу):
/wp-content/plugins/my-plugin/languages/my-plugin-en_US.mo

Наконец, если языковой файл не найден, он проверит расположение по умолчанию:
/wp-content/languages/my-plugin-en_US.mo

Первая проверка была добавлена ​​в 4.6 и дает пользователям определенное место для добавления языкового файла, так как раньше им нужно было знать, куда разработчик добавил языковой файл, теперь пользователю просто нужно знать текстовый домен плагина:/wp -content/languages ​​/ plugins/TEXTDOMAIN-LOCAL.mo


Ниже приведен старый способ (не относится к WP 4.6+)

[...]
Наконец, я хотел бы отметить, что важно загрузить пользовательские языковые файлы пользователя из WP_LANG_DIR, прежде чем загружать языковые файлы, поставляемые с плагином . Когда несколько mo-файлов загружены для одного домена, будет использован первый найденный перевод. Таким образом, языковые файлы, предоставляемые плагином, будут использоваться в качестве запасного варианта для строк, не переведенных пользователем.

public function load_plugin_textdomain()
{
    $domain = 'my-plugin';
    // The "plugin_locale" filter is also used in load_plugin_textdomain()
    $locale = apply_filters( 'plugin_locale', get_locale(), $domain );

    load_textdomain( 
            $domain, 
            WP_LANG_DIR . '/my-plugin/' . $domain . '-' . $locale . '.mo' 
    );
    load_plugin_textdomain( 
            $domain, 
            FALSE, 
            dirname( plugin_basename(__FILE__) ) . '/languages/' 
    );
}
49
EAMann

Убедитесь, что плагины не генерируют ошибок с WP_DEBUG

Всегда проверяйте свои плагины при включенном WP_DEBUG и в идеале включайте его на протяжении всего процесса разработки. Плагин не должен генерировать ЛЮБЫЕ ошибки при включенном WP_DEBUG. Это включает в себя устаревшие уведомления и непроверенные индексы.

Чтобы включить отладку, отредактируйте файл wp-config.php так, чтобы константе WP_DEBUG было присвоено значение true. Смотрите Кодекс по отладке для более подробной информации.

47
John P Bloch

Первое использование существующих функций в ядре WordPress

Если вы можете: использовать существующие функции, включенные в ядро ​​WordPress вместо написания своих собственных. Разрабатывайте пользовательские функции PHP только в том случае, если в ядре WordPress отсутствует соответствующая предварительно существующая функция.

Одним из преимуществ является то, что вы можете использовать "log устаревшие уведомления", чтобы легко отслеживать функции, которые должны быть заменены. Еще одним преимуществом является то, что пользователи могут просматривать документацию по функциям в Кодексе и лучше понимать, что делает плагин, даже если они не являются опытными PHP разработчиками.

Связанные с

41
kaiser

Удаление должно удалить все данные плагина

После удаления из установки WordPress плагин должен удалять все файлы, папки, записи базы данных и таблицы, которые он создал, а также значения параметров, которые он создал.

Плагины могут предлагать возможность экспорта/импорта настроек, так что настройки могут быть сохранены за пределами WordPress до удаления.

Связанные с

33
Travis Northcutt

Предотвращение внедрения SQL с входными данными

Плагин должен очистить весь пользовательский ввод, полученный прямо или косвенно (например, через $_POST или $_GET), перед использованием входных значений для запроса базы данных MySQL.

Смотрите: Форматирование операторов SQL .

33
MikeSchinkel

Используйте класс и объектно-ориентированный код PHP5

Нет причин не писать чистый объектно-ориентированный код PHP5. Поддержка PHP4 будет прекращена после следующего выпуска (WP 3.1). Конечно, вы можете добавить к именам всех ваших функций префикс endlessly_long_function_names_with_lots_of_underscores, но гораздо проще просто написать простой класс и связать все в нем. Кроме того, поместите ваш класс в отдельный файл и назовите его соответствующим образом, чтобы вы могли легко расширять и поддерживать его:

// in functions.php
require 'inc/class-my-cool-plugin.php';
new MyCoolPlugin();

// in inc/class-my-cool-plugin.php
class MyCoolPlugin {
    function __construct() {
        // add filter hooks, wp_enqueue_script, etc.

        // To assign a method from your class to a WP 
        // function do something like this
        add_action('admin_menu', array($this, "admin"));
    }

    public function admin() {
        // public methods, for use outside of the class
        // Note that methods used in other WP functions 
        // (such as add_action) should be public
    }

    private function somethingelse() {
        // methods you only use inside this class
    }
}
30
Husky

Префикс всех элементов глобального пространства имен

Плагин должен правильно префиксировать ВСЕ элементы глобального пространства имен (константы, функции, классы, переменные, даже такие вещи, как пользовательские таксономии, типы записей, виджеты и т.д.). Например, не создавайте функцию с именем init(); вместо этого назовите что-нибудь вроде jpb_init().

Как правило, перед именами следует использовать трех- или четырехбуквенный префикс или использовать функцию пространства имен PHP . Сравните: Однобуквенный префикс для констант класса PHP?

Связанные с

29
John P Bloch

Деактивация не должна провоцировать потерю данных

Плагин не должен удалить все свои данные после деактивация.

Связанные с

25
MikeSchinkel

Включайте только те файлы, которые вам нужны ...

Если вы в переднем конце, не включайте код, который относится к области администратора.

23
Denis de Bernardy

Объявляем о потере данных при удалении плагина

При удалении плагин должен Скажите пользователю, что он удалит его данные и получите подтверждение, что пользователь в порядке удаления данных перед этим, и плагин должен также предоставьте пользователю возможность сохранять данные после удаления. (Эта идея от @EAMann.)

Связанные с

21
MikeSchinkel

Использовать WordPress (встроенный) Обработка ошибок

Не просто return;, если какой-то ввод пользователя был неправильным. Доставить им некоторую информацию о том, что было сделано неправильно.

function some_example_fn( $args = array() ) 
{
    // If value was not set, build an error message
    if ( ! isset( $args['some_value'] ) )
        $error = new WP_Error( 'some_value', sprintf( __( 'You have forgotten to specify the %1$s for your function. %2$s Error triggered inside %3$s on line %4$s.', TEXTDOMAIN ), '$args[\'some_value\']', "\n", __FILE__, __LINE__ ) );

    // die & print error message & code - for admins only!
    if ( isset( $error ) && is_wp_error( $error ) && current_user_can( 'manage_options' ) ) 
        wp_die( $error->get_error_code(), 'Theme Error: Missing Argument' );

    // Elseif no error was triggered continue...
}

Одна ошибка (объект) для всех

Вы можете установить объект глобальной ошибки для вашей темы или плагина во время начальной загрузки:

function bootstrap_the_theme()
{
    global $prefix_error, $prefix_theme_name;
    // Take the theme name as error ID:
    $theme_data = wp_get_theme();
    $prefix_theme_name = $theme_data->Name;
    $prefix_error = new WP_Error( $theme_data->Name );

    include // whatever, etc...
}
add_action( 'after_setup_theme', 'bootstrap_the_theme' );

Позже вы можете добавить неограниченное количество ошибок по запросу:

function some_theme_fn( $args )
{
    global $prefix_error, $prefix_theme_name;
    $theme_data = wp_get_theme();
    if ( ! $args['whatever'] && current_user_can( 'manage_options' ) ) // some required value not set
        $prefix_error->add( $prefix_theme_name, sprintf( 'The function %1$s needs the argument %2$s set.', __FUNCTION__, '$args[\'whatever\']' ) );

    // continue function...
}

Затем вы можете получить их все в конце вашей темы. Таким образом, вы не прерываете рендеринг страницы и можете выводить все свои ошибки для разработки.

function dump_theme_errors()
{
    global $prefix_error, $prefix_theme_name;

    // Not an admin? OR: No error(s)?
    if ( ! current_user_can( 'manage_options' ) ! is_wp_error( $prefix_error ) )
        return;

    $theme_errors = $prefix_error->get_error_messages( $prefix_theme_name );
    echo '<h3>Theme Errors</h3>';
    foreach ( $theme_errors as $error )
        echo "{$error}\n";
}
add_action( 'shutdown', 'dump_theme_errors' );

Вы можете найти дополнительную информацию в это Q . Связанный билет, чтобы исправить "совместную работу" WP_Error и wp_die(), связан оттуда, и за ним последует другой билет. Комментарии, критики и прочее приветствуется.

19
kaiser

Пусть имя папки плагина будет изменено

/ плагинов/pluginname/{} различные

"Имя плагина", используемое для папки, всегда должно быть изменяемым.

Обычно это делается путем определения констант и их последовательного использования в плагине.

Излишне говорить, что многие популярные плагины являются грешниками.

Связанные с:

  • plugins_url() для удобной ссылки на ресурсы, включенные в плагин.
19
AndyBeard

Минимизировать имена, добавленные в глобальное пространство имен

Плагин должен максимально уменьшить его влияние с помощью минимизировать количество имен, добавляемых в глобальное пространство имен .

Это можно сделать путем инкапсуляции функций плагина в класс или с помощью функции пространств имен PHP . Префикс всего может также помочь, но не настолько гибок.

Рядом с функциями и классами плагин не должен вводит глобальные переменные. Использование классов обычно их устаревает, и это упрощает обслуживание плагинов.

Связанные с

18
hakre

Комментарий с использованием PhpDoc

Лучшая практика близка к стилю PhpDoc. Если вы не используете IDE, например "Eclipse", вы можете просто взглянуть на Руководство по PhpDoc .

Вам не нужно точно знать, как это работает. Профессиональные разработчики могут прочитать код в любом случае и просто нужно это в качестве резюме. Хобби-программисты и пользователи могут по достоинству оценить, как вы объясняете это на одном уровне знаний.

17
kaiser

Используйте API настроек перед add_option

Вместо добавления параметров в БД с помощью функции add_option, вы должны хранить их как массив с помощью Настройки API , который позаботится обо всем за вас.

Используйте API Модификации Темы перед add_option

Modification API - довольно простая конструкция и безопасный способ, позволяющий добавлять и извлекать параметры. Все сохраняется как сериализованное значение в вашей базе данных. Легко, безопасно и просто.

17
kaiser

Защита пользователей плагинов

(Ранее: анонимный API-интерфейс)

Если плагин связывается с внешней системой или API (например, с некоторым веб-сервисом), он должен делать это анонимно или предоставлять пользователю анонимную опцию, которая гарантирует, что никакие данные, относящиеся к пользователю плагина, не будут просачиваться ко второй стороне.

16
EAMann

Обеспечить контроль доступа с помощью разрешений

Во многих случаях пользователи могут не захотеть, чтобы все имели доступ к областям, созданным вашим плагином, особенно с помощью плагинов, которые выполняют несколько сложных операций, одной проверки жестко закодированных возможностей может быть недостаточно.

По крайней мере, имейте соответствующие проверки возможностей для всех видов процедур, для которых может использоваться ваш плагин.

15
eddiemoya

Размещать плагины на WordPress.org

Используйте SVN repository , предоставляемый на WordPress.org для размещения плагинов. Это облегчает обновление пользовательского интерфейса, и, если вы никогда ранее не использовали SVN, оно дает вам возможность понять, используя его в контексте, который оправдывает это.

14
pixeline

Организуйте свой код

Всегда трудно прочитать код, который не написан в порядке его выполнения. Сначала включите/require, define, wp_enqueue_style & _script и т.д., Затем функции, в которых нуждается плагин/тема и, наконец, компоновщик (например, экран администратора, материал, который интегрируется в тему и т.д.).

Попробуйте разделить такие вещи, как css и js, в их собственных папках. Также попробуйте сделать это с функциями, которые являются только помощниками, такими как выравниватель массива и тому подобное. Сохранение "основного" файла как можно более понятным и легким для чтения - это способ, который помогает пользователям, разработчикам и вам, когда вы пытаетесь обновить в течение года и не видели код в течение более длительного времени.

Также хорошо иметь структуру, которую вы часто повторяете, чтобы вы всегда находили свой путь. Разработка известной структуры для различных проектов даст вам время сделать ее лучше, и даже если ваш клиент переключится на другого разработчика, вы никогда не услышите "он оставил хаос". Это создает вашу репутацию и должно быть долгосрочной целью.

12
kaiser

Импорт/Экспорт настроек плагина

Это не так часто встречается в плагинах, но если ваш плагин имеет (некоторые) настройки, он должен обеспечивает импорт/экспорт данных, таких как конфигурация и ввод данных пользователем .

Импорт/Экспорт улучшает удобство использования плагина.

Примером плагина, который имеет такую ​​функциональность импорта и экспорта (а также механизм отмены), является Breadcrumb NavXT (плагин Wordpress) (полное раскрытие: там немного моего кода, большая часть которого была сделана mtekk) ,.

Связанные с

12
hakre

Умри со стилем

умереть достойно Все функции плагинов (и даже тем) должны использовать wp_die() в критических местах, чтобы предложить пользователю немного информации о том, что произошло. Ошибки Php раздражают, и wp_die может дать пользователю сообщение в стиле Nice о том, что плагин (или они) сделали неправильно. Плюс, если пользователь отключил отладку, плагин просто сломается.

Использование wp_die() также помогает совместить ваши плагины/темы с wordpress testsuite .

11
kaiser

Предоставить справочные экраны для пользователей

Лучше сказать RTFM (щелкните справку) в качестве ответа, чем снова и снова отвечать на вопрос.

/**
  * Add contextual help for this screen
  * 
  * @param $rtfm
  * @uses get_current_screen
  */ 
  function ContextualHelp( /*string*/ $rtfm) 
  { 
     $current_screen = get_current_screen();
     if ($current_screen->id == $this->_pageid) 
     {
        $rtfm .= '<h3>The WordPress Plugin - Screen A</h3>';
        $rtfm .= '<p>Here are some tips: donate to me ' .
     }
     return $rtfm; 
  }
add_action('contextual_help', array($this,'ContextualHelp'),1,1);

update/note: (см. комментарии от kaiser): приведенный выше пример должен использоваться в классе

11
edelwater

Предлагаем расширяемые формы

Когда плагин предлагает возможность ввода данных, он всегда должен иметь хук в конце, прямо перед кнопкой "Отправить" и/или "Сброс", чтобы разработчики могли легко расширять форму не только полями, но и кнопками.

Смотрите: Настройки API

Связанные с

10
kaiser

включать функцию всегда через Hook, а не напрямую.

Пример:

  • Не использовать для включения класса плагина через новый без хука

  • Используйте Hook plugins_loaded

    // add the class to WP                                   
    function my_plugin_start() {                                                               
        new my_plugin();   
    }                                                        
    add_action( 'plugins_loaded', 'my_plugin_start' );
    

Обновление: маленький живой пример: Plugin-svn-trunk-page и псевдо-пример

//avoid direct calls to this file where wp core files not present
if (!function_exists ('add_action')) {
        header('Status: 403 Forbidden');
        header('HTTP/1.1 403 Forbidden');
        exit();
}

if ( !class_exists( 'plugin_class' ) ) {
    class plugin_class {

        function __construct() {
        }

    } // end class

    function plugin_start() {

        new plugin_class();
    }

    add_action( 'plugins_loaded', 'plugin_start' );
} // end class_exists

Вы также можете загрузить через mu_plugins_loaded на multisite-install, см. Справочник действий для кодекса: http://codex.wordpress.org/Plugin_API/Action_Reference Также здесь вы видите, как работает wP с этим хуком: http://adambrown.info/p/wp_hooks/hook/plugins_loaded?version=2.1&file=wp-settings.php Я использую это очень часто, и это не так сложно и рано, лучше, чем жесткий новый класс ();

9
bueltge

Описание вашего плагина должно точно детализировать функции вашего плагина. Есть 10 рекомендуемых пост-плагинов. Все они отображают избранные сообщения, но многие из них имеют различные функции. Должно быть легко сравнить ваш плагин с аналогичными плагинами, прочитав описание.

Вы должны избегать хвастовства о том, насколько прост ваш плагин, если только он не очень простой. Вы должны включить полезные ссылки в описании, такие как ссылка на настройки.

8
Greg

Лицензионные плагины под лицензией, совместимой с GPL

Плагины и темы должны должны быть лицензированы под WordPress-совместимой лицензией. Это позволяет перераспределять их с WordPress как "программу". Рекомендуемая лицензия - GPL . Убедитесь, что все библиотеки кода, включенные в плагин, совместимы с одной и той же лицензией.

(Это было было проблемой и серьезным предметом обсуждения как в прошлом, так и в настоящем .)

8
EAMann

Минимизируйте побочные эффекты от удаленных источников данных и веб-сервисов

Плагин should Cache/Shield Webservice и/или XMLRPC/SOAP-запросы через уровень кэширования/провайдера данных если вы используете их так, чтобы не делать front-запросы ожидающими ( медленный) ответ веб-службы.

Это включает в себя загрузку RSS-канала и других страниц. Разработайте ваши плагины, чтобы они запрашивали данные в фоновом режиме.

Один из возможных ШАГОВ (Возьмите в качестве примера публикацию на ping.fm): создайте буферную таблицу, скажем: ping_fm_buffer_post (дата, время, сообщение, submit_time, status)

  1. Каждый раз, когда вы хотите отправить обновление в ping.fm, добавьте его в эту таблицу.
  2. Теперь нам нужно создать плагин для обработки этих данных. Этот плагин будет запускаться через crontab для проверки каждого обновления, которое еще не отправлено
  3. Поскольку у нас есть эта таблица, мы также можем перечислить каждое сообщение, отправленное на ping.fm, и проверить статус каждого сообщения. На случай, если на стороне ping.fm возникнет проблема, мы можем отправить ее заново.
7
hakre

Проверьте свой плагин

У нас должны быть некоторые инструменты тестирования в нашей среде разработки плагинов.

Основываясь на этом ответе by Итане Зайферте на тестовый вопрос, следует соблюдать следующие рекомендации:

  • Ваше модульное тестирование должно проверять наименьшее количество поведения, которое может выполнить класс.
  • Когда вы дойдете до уровня функционального тестирования, вы сможете протестировать свой код с зависимостями Wordpress.
  • В зависимости от того, что делает ваш плагин - рассмотрите возможность использования тестов на основе Selenium, которые проверяют наличие данных в DOM с помощью идентификаторов
7
Fernando Briano

Используйте правильные имена

Назовите хуки и фильтры (классы, функции и переменные), чтобы чтобы люди могли идентифицировать их даже через год , когда они уже не помнят, откуда взялся этот кусок пирога или кода. Неважно, если имена хуков/фильтров станут длинными. Ex. youruniquename_hook/filter_whatitdoes.

  • Если ваш файл содержит класс с именем "dbdbInit", то файл, содержащий этот класс, должен называться "dbdbInit.class.php".
  • Если вы попали внутрь вашего dbdbInit- класса функция, которая регистрирует ex. custom_post_types, затем назовите его register_custom_post_types().
  • Если вы получили массив, содержащий имена для custom_post_types, то вызовите переменную, которой назначен массив, $custom_post_type_names.
  • Если у вас есть функция, которая обрабатывает массив, напишите function array_handler( $array ) { // handle the array} ..
  • Просто попробуйте назвать вещи так, чтобы вы знали, что делает знак/где он принадлежит по его названию.

Другое дело: если вам нужно отладить что-то, то в 99% случаев вы получаете все свои сообщения не только для своего кода, но и для WordPress. Поэтому попробуйте использовать тот же префикс ex. "dbdb" для ваших классов, открытых функций и переменных/объектов. Таким образом, вы можете легко найти их между сотнями файлов. (Wordpress загружает 64 файла перед вашей темой и около 1550 функций, не говоря уже о хуках и фильтрах.)

6
kaiser

Забота о будущих версиях WordPress и тем

Примечание. Перечитав этот совет, я отступлю от этой практики, поскольку проверка существования каждой функции может замедлить работу вашего сайта.

Проверить, если функции устарели непосредственно в вашей теме.

Это пример "может быть таким".

if ( ! function_exists( 'wp_some_fn' ) ) 
{
    $theme_data = wp_get_theme();
    $error = new WP_Error( 'wp_some_fn', sprintf( __( 'The function %1$s is deprecated. Please inform the author', TEXTDOMAIN ), "Theme: {$theme_data->Name}: Version {$theme_data->Version}" );

    // abort
    if ( is_wp_error( $error ) )
        return print $error->get_error_message();
} 
// else if no error - the function works and exists
wp_some_fn();

Для правильной/лучшей практики обработки ошибок см. Этот ответ: ссылка

Вы можете добавить даже $ причина в функцию. Это поможет вам и вашим пользователям следить за функциями или классами в вашей теме, которые могут измениться.

6
kaiser

Использовать стандарты кодирования WordPress

http://codex.wordpress.org/WordPress_Coding_Standards

Вы знаете, насколько проще обновлять код, над которым вы работали, по сравнению с кодом, написанным кем-то другим? Стандарты кодирования позволяют любому разработчику, работающему над проектом, прийти и посмотреть, что происходит.

Мы знаем, что ваш плагин или тема - ваша собственная, и то, как вы ломаете линии и добавляете фигурные скобки, является выражением вашей индивидуальности. Каждый абзац - это тщательно продуманное утверждение. Но с вашим собственным кодом вы вносите свой вклад в WordPress, даже если ваш код не находится в основном приложении. Стандарты кодирования помогают разработчикам быстро освоить ваш код.

6
gabrielk

Отделение от кода ядра WordPress

Плагин должен уменьшить влияние WordPress API до необходимого минимума , чтобы отделить код плагина от кода WordPress. Это уменьшает влияние изменений в кодовой базе WordPress на плагин. Кроме того, это улучшает совместимость версий кода вашего плагина.

Это не означает, что вы не должны использовать функции WordPress (используйте их, как Повторное использование существующих функций предлагает), но не для того, чтобы слишком много мешать ваш код с функциями WordPress, но чтобы отделить бизнес-логику ваших плагинов. из функциональности WordPress.

6
hakre

Используйте параметры wp для выходных строк плагина

Для того, чтобы плагин легко использовался и настраивался, все выходные строки должны быть модифицируемыми. Лучший способ сделать это - использовать wp-options для хранения выходных строк и предоставить backend для изменения значений по умолчанию. Плагин не должен использовать отображаемые строки, которые нельзя легко изменить с помощью бэкэнда плагина.

Например: Общительный - дает вам возможность изменить предложение, которое появляется перед частью значков "поделиться и наслаждаться:"

5
hannit cohen

Используйте деинсталляцию, активацию и деактивацию хуков

Для этого есть три разных крючка:

  • Удалить register_uninstall_hook();
  • Деактивация register_deactivation_hook();
  • Активация register_activation_hook();

Подробную инструкцию с рабочим примером можно найти здесь. .

3
kaiser