Posted on Leave a comment

Шаг 8: Тестирование и подготовка к релизу

База знаний

На этом этапе мы проведем тщательное тестирование плагина, исправим возможные ошибки и подготовим его к релизу.

  1. Активируйте плагин на тестовом сайте WordPress.
  2. Протестируйте все функции плагина:
    • Создание новых записей о базах знаний
    • Редактирование относительных записей
    • Удаление записей
    • Поиск записей на странице со списком
    • Пагинация на странице со списком
    • Настройки плагина на странице настроек
    • Проверка прав доступа для разных ролей пользователей
  3. Проверьте совместимость с последней версией WordPress и с различными темами и плагинами.
  4. Убедитесь, что плагин корректно работает на разных устройствах и в разных браузерах.
  5. Исправь любые найденные ошибки и недочеты.
  6. Оптимизируйте плагин кода:
    • Удали неиспользуемый или закомментированный закодированный
    • Примени технику минификации для файлов стилей и скриптов
    • Проверьте и оптимизируйте запросы к базе данных
  7. Подготовить файлы для релиза:
    • Создан архив ZIP с плагинами файлов
    • Убедись, что архив содержит все необходимые файлы и папки.
  8. Напишите документацию для плагина:
    • Создай файл readme.txtв корневом плагине плагина
    • Опиши назначение и функцию плагина
    • Ознакомьтесь с системными требованиями и инструкциями по установке.
    • Добавить часто задаваемые вопросы (FAQ) и инструкции по использованию
    • Укажите свои контактные данные для поддержки и обратной связи.
  9. Подготовить плагин страницы на WordPress.org или на своем сайте:
    • Созданное описание и скриншоты плагина
    • Откройте ссылку на архив с файлами плагина
    • Добавить инструкцию по установке и использованию
    • Откройте совместимость с версиями WordPress и другими плагинами.
  10. Опубликовать плагин и сообщить о выпуске:
    • Загрузите плагин на WordPress.org или на свой сайт.
    • Опубликовать объявление о релизе на своем сайте или в блоге.
    • Поделились информацией о плагине в социальных сетях и на форумах WordPress.

Поздравляю! Мы успешно завершаем разработку плагина «База знаний для администраторов». Теперь он готов к использованию и распространению.

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

Удачи с релизом плагина!

Posted on Leave a comment

Шаг 6. Разграничение доступа и безопасность

База знаний

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

  1. Открой файл admin-knowledge-base.php в корневой папке плагина.
  2. Найди функцию akb_register_post_type() и добавь следующий код внутри массива $args:
'capability_type'    => 'post',
'map_meta_cap'       => true,
'capabilities'       => array(
    'create_posts' => 'create_knowledge_base',
    'edit_posts'   => 'edit_knowledge_base',
    'delete_posts' => 'delete_knowledge_base',
),

Этот код определяет специальные возможности (capabilities) для типа записи «База знаний». Мы указываем, что для создания, редактирования и удаления записей базы знаний требуются специальные возможности create_knowledge_base, edit_knowledge_base и delete_knowledge_base соответственно.

  1. Добавь следующий код в конец файла admin-knowledge-base.php:
function akb_add_admin_capabilities() {
    $role = get_role( 'administrator' );

    if ( ! $role->has_cap( 'create_knowledge_base' ) ) {
        $role->add_cap( 'create_knowledge_base' );
    }

    if ( ! $role->has_cap( 'edit_knowledge_base' ) ) {
        $role->add_cap( 'edit_knowledge_base' );
    }

    if ( ! $role->has_cap( 'delete_knowledge_base' ) ) {
        $role->add_cap( 'delete_knowledge_base' );
    }
}
register_activation_hook( __FILE__, 'akb_add_admin_capabilities' );

function akb_remove_admin_capabilities() {
    $role = get_role( 'administrator' );

    if ( $role->has_cap( 'create_knowledge_base' ) ) {
        $role->remove_cap( 'create_knowledge_base' );
    }

    if ( $role->has_cap( 'edit_knowledge_base' ) ) {
        $role->remove_cap( 'edit_knowledge_base' );
    }

    if ( $role->has_cap( 'delete_knowledge_base' ) ) {
        $role->remove_cap( 'delete_knowledge_base' );
    }
}
register_deactivation_hook( __FILE__, 'akb_remove_admin_capabilities' );

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

  1. Открой файл admin-page.php в папке includes.
  2. Найди функцию akb_render_admin_page() и добавь следующий код в начало функции:
if ( ! current_user_can( 'edit_knowledge_base' ) ) {
    wp_die( esc_html__( 'You do not have sufficient permissions to access this page.', 'admin-knowledge-base' ) );
}

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

  1. Сохрани все изменения в файлах.

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

На следующем шаге мы займемся стилизацией и скриптами для улучшения внешнего вида и функциональности плагина.

Posted on Leave a comment

Шаг 5. Создание, редактирования и удаления записей базы знаний

База знаний

Шаг 5: Реализация функциональности создания, редактирования и удаления записей базы знаний

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

  1. Создай новый файл post-management.php в папке includes плагина.
  2. Открой файл post-management.php и добавь следующий код:
<?php

function akb_save_post_meta( $post_id ) {
    if ( isset( $_POST['akb_meta_box_nonce'] ) && wp_verify_nonce( $_POST['akb_meta_box_nonce'], 'akb_save_post_meta' ) ) {
        if ( isset( $_POST['akb_post_meta'] ) ) {
            $post_meta = sanitize_text_field( $_POST['akb_post_meta'] );
            update_post_meta( $post_id, 'akb_post_meta', $post_meta );
        }
    }
}
add_action( 'save_post_knowledge_base', 'akb_save_post_meta' );

function akb_add_post_meta_box() {
    add_meta_box(
        'akb_post_meta_box',
        esc_html__( 'Additional Information', 'admin-knowledge-base' ),
        'akb_render_post_meta_box',
        'knowledge_base',
        'normal',
        'default'
    );
}
add_action( 'add_meta_boxes_knowledge_base', 'akb_add_post_meta_box' );

function akb_render_post_meta_box( $post ) {
    $post_meta = get_post_meta( $post->ID, 'akb_post_meta', true );
    wp_nonce_field( 'akb_save_post_meta', 'akb_meta_box_nonce' );
    ?>
    <label for="akb_post_meta"><?php esc_html_e( 'Additional Information', 'admin-knowledge-base' ); ?></label>
    <textarea id="akb_post_meta" name="akb_post_meta" rows="4" cols="50"><?php echo esc_textarea( $post_meta ); ?></textarea>
    <?php
}
  1. Давай разберем основные части этого кода:
  • akb_save_post_meta(): Функция для сохранения метаданных записи при ее создании или обновлении. Она проверяет наличие и валидность nonce, а затем сохраняет значение метаданных, если оно присутствует.
  • akb_add_post_meta_box(): Функция для добавления метабокса с дополнительной информацией на страницу редактирования записи базы знаний. Она использует функцию add_meta_box() для регистрации метабокса.
  • akb_render_post_meta_box(): Функция для отображения содержимого метабокса на странице редактирования записи. Она получает текущие значения метаданных и выводит текстовое поле для их редактирования.
  1. Сохрани файл post-management.php.
  2. Открой главный файл плагина admin-knowledge-base.php и добавь следующий код в конце файла:
require_once plugin_dir_path( __FILE__ ) . 'includes/post-management.php';

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

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

Posted on Leave a comment

Шаг 3. Создание страницы настроек плагина

База знаний

Страница настроек плагина позволит администраторам настраивать различные параметры и опции плагина «База знаний для администраторов». Мы создадим страницу настроек в админ-панели WordPress, используя WordPress Settings API.

Вот подробные шаги для создания страницы настроек плагина:

  1. Создайте новый файл settings-page.php в папке includes плагина.
  2. Откройте файл settings-page.php и добавьте следующий код:
phpCopy code<?php

function akb_register_settings() {
    add_option( 'akb_settings', array(
        'entries_per_page' => 10,
        'admin_email'      => get_option( 'admin_email' ),
    ) );

    register_setting(
        'akb_settings_group',
        'akb_settings',
        'akb_sanitize_settings'
    );

    add_settings_section(
        'akb_general_section',
        esc_html__( 'General Settings', 'admin-knowledge-base' ),
        'akb_render_general_section',
        'akb_settings_page'
    );

    add_settings_field(
        'akb_entries_per_page',
        esc_html__( 'Entries per page', 'admin-knowledge-base' ),
        'akb_render_entries_per_page_field',
        'akb_settings_page',
        'akb_general_section'
    );

    add_settings_field(
        'akb_admin_email',
        esc_html__( 'Admin Email', 'admin-knowledge-base' ),
        'akb_render_admin_email_field',
        'akb_settings_page',
        'akb_general_section'
    );
}
add_action( 'admin_init', 'akb_register_settings' );

function akb_sanitize_settings( $input ) {
    $sanitized_input = array();

    if ( isset( $input['entries_per_page'] ) ) {
        $sanitized_input['entries_per_page'] = absint( $input['entries_per_page'] );
    }

    if ( isset( $input['admin_email'] ) ) {
        $sanitized_input['admin_email'] = sanitize_email( $input['admin_email'] );
    }

    return $sanitized_input;
}

function akb_render_general_section() {
    // Render section description or leave it empty
}

function akb_render_entries_per_page_field() {
    $options = get_option( 'akb_settings' );
    $entries_per_page = isset( $options['entries_per_page'] ) ? $options['entries_per_page'] : 10;
    ?>
    <input type="number" name="akb_settings[entries_per_page]" value="<?php echo esc_attr( $entries_per_page ); ?>" min="1" max="100" required>
    <?php
}

function akb_render_admin_email_field() {
    $options = get_option( 'akb_settings' );
    $admin_email = isset( $options['admin_email'] ) ? $options['admin_email'] : get_option( 'admin_email' );
    ?>
    <input type="email" name="akb_settings[admin_email]" value="<?php echo esc_attr( $admin_email ); ?>" required>
    <?php
}

function akb_add_settings_page() {
    add_options_page(
        esc_html__( 'Knowledge Base Settings', 'admin-knowledge-base' ),
        esc_html__( 'Knowledge Base', 'admin-knowledge-base' ),
        'manage_options',
        'akb_settings_page',
        'akb_render_settings_page'
    );
}
add_action( 'admin_menu', 'akb_add_settings_page' );

function akb_render_settings_page() {
    ?>
    <div class="wrap">
        <h1><?php echo esc_html( get_admin_page_title() ); ?></h1>
        <form action="options.php" method="post">
            <?php
            settings_fields( 'akb_settings_group' );
            do_settings_sections( 'akb_settings_page' );
            submit_button( esc_html__( 'Save Settings', 'admin-knowledge-base' ) );
            ?>
        </form>
    </div>
    <?php
}
  1. Давайте разберем основные части этого кода:
    • akb_register_settings(): Функция для регистрации настроек плагина. Она добавляет опцию akb_settings для хранения настроек, регистрирует группу настроек akb_settings_group и добавляет секцию настроек akb_general_section с полями akb_entries_per_page и akb_admin_email.
    • akb_sanitize_settings(): Функция для очистки и проверки введенных значений настроек перед их сохранением. Она использует встроенные функции WordPress, такие как absint() и sanitize_email(), для обеспечения безопасности данных.
    • akb_render_general_section()akb_render_entries_per_page_field()akb_render_admin_email_field(): Функции для отображения секции настроек и полей ввода на странице настроек.
    • akb_add_settings_page(): Функция для добавления страницы настроек в меню «Настройки» админ-панели WordPress. Она использует функцию add_options_page() для регистрации страницы настроек.
    • akb_render_settings_page(): Функция для отображения содержимого страницы настроек. Она включает в себя форму с полями настроек и кнопку сохранения.
  2. Сохраните файл settings-page.php.
  3. Откройте главный файл плагина admin-knowledge-base.php и добавьте следующий код в конце файла:
phpCopy coderequire_once plugin_dir_path( __FILE__ ) . 'includes/settings-page.php';

Этот код подключает файл settings-page.php к главному файлу плагина.

Теперь у нас есть страница настроек плагина, где администраторы могут настроить количество записей на странице и адрес электронной почты администратора. Настройки сохраняются в опции akb_settings и могут быть доступны с помощью функции get_option( 'akb_settings' ) в других частях плагина.

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

Posted on Leave a comment

Шаг 2. Регистрация нового типа записей «База знаний»

База знаний

В WordPress типы записей (post types) используются для создания различных типов контента. По умолчанию WordPress предоставляет типы записей «post» (запись) и «page» (страница). Мы создадим новый тип записей «База знаний» для хранения записей базы знаний.

Вот подробные шаги для регистрации нового типа записей «База знаний»:

  1. Откройте файл admin-knowledge-base.php в корневой папке плагина.
  2. Добавьте следующий код для регистрации типа записей:
function akb_register_post_type() {
    $labels = array(
        'name'               => esc_html__( 'Knowledge Base', 'admin-knowledge-base' ),
        'singular_name'      => esc_html__( 'Knowledge Base Entry', 'admin-knowledge-base' ),
        'menu_name'          => esc_html__( 'Knowledge Base', 'admin-knowledge-base' ),
        'name_admin_bar'     => esc_html__( 'Knowledge Base Entry', 'admin-knowledge-base' ),
        'add_new'            => esc_html__( 'Add New', 'admin-knowledge-base' ),
        'add_new_item'       => esc_html__( 'Add New Entry', 'admin-knowledge-base' ),
        'new_item'           => esc_html__( 'New Entry', 'admin-knowledge-base' ),
        'edit_item'          => esc_html__( 'Edit Entry', 'admin-knowledge-base' ),
        'view_item'          => esc_html__( 'View Entry', 'admin-knowledge-base' ),
        'all_items'          => esc_html__( 'All Entries', 'admin-knowledge-base' ),
        'search_items'       => esc_html__( 'Search Entries', 'admin-knowledge-base' ),
        'parent_item_colon'  => esc_html__( 'Parent Entry:', 'admin-knowledge-base' ),
        'not_found'          => esc_html__( 'No entries found.', 'admin-knowledge-base' ),
        'not_found_in_trash' => esc_html__( 'No entries found in Trash.', 'admin-knowledge-base' )
    );

    $args = array(
        'labels'             => $labels,
        'description'        => esc_html__( 'Knowledge Base entries for administrators', 'admin-knowledge-base' ),
        'public'             => false,
        'publicly_queryable' => false,
        'show_ui'            => true,
        'show_in_menu'       => true,
        'query_var'          => true,
        'rewrite'            => array( 'slug' => 'knowledge-base' ),
        'capability_type'    => 'post',
        'has_archive'        => false,
        'hierarchical'       => false,
        'menu_position'      => null,
        'supports'           => array( 'title', 'editor', 'author', 'thumbnail', 'excerpt', 'comments' )
    );

    register_post_type( 'knowledge_base', $args );
}
add_action( 'init', 'akb_register_post_type' );
  1. Давайте разберем основные части этого кода:
  • $labels: Массив с метками для различных элементов интерфейса, связанных с типом записей. Он определяет названия и текст, которые будут отображаться в админ-панели WordPress.
  • $args: Массив с аргументами для регистрации типа записей. Он определяет различные настройки и параметры типа записей.
    • public и publicly_queryable установлены в false, чтобы записи не были доступны на фронтенде сайта.
    • show_ui и show_in_menu установлены в true, чтобы тип записей отображался в админ-панели WordPress.
    • capability_type установлен в 'post', чтобы использовать стандартные возможности записей WordPress.
    • supports определяет поддерживаемые функции для типа записей, такие как заголовок, редактор, автор, миниатюра и т.д.
  • register_post_type(): Функция WordPress для регистрации нового типа записей. Она принимает два аргумента: название типа записей ('knowledge_base') и массив аргументов ($args).
  • add_action(): Функция WordPress для добавления действия. Мы привязываем функцию akb_register_post_type() к хуку 'init', чтобы она выполнялась при инициализации WordPress.
  1. Сохраните файл admin-knowledge-base.php.

Теперь у нас есть зарегистрированный тип записей «База знаний». Он будет доступен в админ-панели WordPress, и администраторы смогут создавать, редактировать и удалять записи базы знаний.

Основные изменения в коде:

  1. Все переводимые строки теперь обернуты функцией esc_html__() вместо __(). Функция esc_html__() выполняет перевод строки и затем применяет защитный эскейп с помощью esc_html() для предотвращения XSS-атак.
  2. Текстовый домен плагина 'admin-knowledge-base' передается вторым аргументом в функцию esc_html__(). Это позволяет переводить строки плагина отдельно от других строк в WordPress.
  3. Все строки теперь на английском языке, что является хорошей практикой для многоязычных плагинов. Переводы будут выполняться с помощью файлов перевода (.po и .mo файлы), которые мы создадим позже.

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

  1. Загрузить все переводимые строки в плагине с помощью функций esc_html__()__()esc_html_e()_e() и т.д.
  2. Сгенерировать файл шаблона перевода (.pot) с помощью инструментов, таких как WP-CLI или Poedit.
  3. Создать файлы перевода (.po и .mo) для каждого языка, который мы хотим поддерживать, используя файл шаблона перевода.
  4. Загрузить файлы перевода в соответствующую директорию плагина (обычно languages/).
  5. Загрузить текстовый домен плагина с помощью функции load_plugin_textdomain() в файле плагина.

Эти шаги обеспечат полную поддержку многоязычности в нашем плагине «База знаний для администраторов». WordPress будет автоматически загружать соответствующие переводы в зависимости от языка сайта.

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

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