Posted on Leave a comment

База знаний для администраторов

База знаний

Бизнес-логика:

  1. Роли пользователей:
    • Администратор: Имеет возможность создавать, редактировать и удалять записи в базе знаний.
    • Другие роли: Не имеют доступа к записям базы знаний.
  2. Создание нового типа записей «База знаний»:
    • Плагин создаст новый тип записей «База знаний» в WordPress.
    • Записи базы знаний будут иметь свои собственные метаданные, такие как заголовок, описание и категория.
  3. Управление записями базы знаний:
    • Администраторы смогут создавать новые записи через специальную форму в админ-панели WordPress.
    • Администраторы смогут редактировать и удалять существующие записи базы знаний.
    • Записи могут содержать текст, изображения, ссылки и другие медиа-элементы для лучшего объяснения работы с плагинами или виджетами.
  4. Отображение записей базы знаний в админ-панели:
    • Плагин добавит новый пункт меню «База знаний» в левом сайдбаре админ-панели WordPress.
    • При нажатии на этот пункт меню, администраторы смогут просматривать список всех записей базы знаний.
    • Записи базы знаний будут отображаться в виде таблицы с возможностью поиска, фильтрации и сортировки по категориям.
  5. Категории базы знаний:
    • Администраторы смогут создавать и управлять категориями базы знаний для организации записей.
    • Каждой записи базы знаний можно будет присвоить одну или несколько категорий.
  6. Разграничение доступа:
    • Только пользователи с ролью «Администратор» будут иметь доступ к созданию, редактированию и удалению записей базы знаний.
    • Другие роли пользователей не будут иметь доступа к записям базы знаний.
  7. Настройки плагина:
    • Плагин будет иметь страницу настроек, где администраторы смогут настраивать различные параметры, такие как количество записей на странице, параметры отображения и т.д.
  8. Безопасность:
    • Плагин должен обеспечивать безопасность и предотвращать несанкционированный доступ к записям базы знаний.
    • Только авторизованные пользователи с ролью «Администратор» должны иметь доступ к функциям плагина.
  9. Документация и поддержка:
    • Плагин должен включать в себя подробную документацию по использованию и настройке.
    • Должна быть предоставлена поддержка и возможность сообщать о проблемах или запрашивать новые функции.

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

Шаг 1: Создание структуры плагина

  1. Создайте новую папку для плагина, например, «admin-knowledge-base».
  2. Внутри папки плагина создайте основной файл плагина, например, «admin-knowledge-base.php».
  3. Добавьте комментарий в начале файла с информацией о плагине, такой как название, описание, версия и автор.
  4. Создайте подпапки для организации файлов плагина, например, «includes» для дополнительных файлов и «assets» для файлов стилей и скриптов.

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

  1. В файле «admin-knowledge-base.php» добавьте действие на хук «init» для регистрации нового типа записей.
  2. Используйте функцию «register_post_type()» для регистрации типа записей «База знаний».
  3. Настройте параметры типа записей, такие как метки, описание, иконку и возможности.
  4. Добавьте поддержку меток, миниатюр и других необходимых функций для типа записей.

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

  1. Создайте новый файл, например, «settings-page.php», в папке «includes».
  2. Добавьте действие на хук «admin_menu» для создания новой страницы настроек в админ-панели WordPress.
  3. Используйте функцию «add_options_page()» для добавления страницы настроек.
  4. Создайте функцию обратного вызова для отображения содержимого страницы настроек.
  5. Добавьте необходимые поля и параметры на страницу настроек, используя WordPress Settings API.

Шаг 4: Создание пользовательского интерфейса для управления записями базы знаний

  1. Создайте новый файл, например, «admin-page.php», в папке «includes».
  2. Добавьте действие на хук «admin_menu» для создания нового пункта меню «База знаний» в админ-панели WordPress.
  3. Используйте функцию «add_menu_page()» для добавления пункта меню и страницы.
  4. Создайте функцию обратного вызова для отображения содержимого страницы управления записями базы знаний.
  5. Реализуйте функциональность для отображения списка записей базы знаний, поиска, фильтрации и сортировки.
  6. Добавьте ссылки или кнопки для создания, редактирования и удаления записей базы знаний.

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

  1. Создайте новый файл, например, «post-management.php», в папке «includes».
  2. Реализуйте функции для создания, редактирования и удаления записей базы знаний.
  3. Используйте функции WordPress, такие как «wp_insert_post()», «wp_update_post()» и «wp_delete_post()», для работы с записями.
  4. Добавьте необходимые проверки безопасности и валидацию данных.
  5. Реализуйте обработку метаданных записей, таких как категории и другие пользовательские поля.

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

  1. Добавьте проверки на роль пользователя «Администратор» перед отображением пунктов меню и страниц плагина.
  2. Используйте функции WordPress, такие как «current_user_can()», для проверки прав доступа пользователя.
  3. Добавьте проверки nonce для защиты от несанкционированных запросов.
  4. Реализуйте необходимые меры безопасности, такие как валидация и очистка входных данных.

Шаг 7: Стилизация и скрипты

  1. Создайте файлы стилей и скриптов в папке «assets».
  2. Подключите файлы стилей и скриптов к страницам плагина, используя функции «wp_enqueue_style()» и «wp_enqueue_script()».
  3. Реализуйте необходимые стили для пользовательского интерфейса плагина.
  4. Добавьте скрипты для улучшения интерактивности и функциональности, такие как обработка форм и AJAX-запросы.

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

  1. Активируйте плагин на тестовой среде WordPress.
  2. Протестируйте все функции плагина, такие как создание, редактирование и удаление записей базы знаний.
  3. Проверьте разграничение доступа и безопасность плагина.
  4. Исправьте любые ошибки и проблемы, обнаруженные во время тестирования.

Шаг 9: Документация и поддержка

  1. Создайте файл «readme.txt» в корневой папке плагина.
  2. Добавьте инструкции по установке, настройке и использованию плагина в файл «readme.txt».
  3. Предоставьте информацию о поддержке и контактные данные для пользователей плагина.
  4. Рассмотрите возможность создания сайта или страницы документации для предоставления более подробной информации и часто задаваемых вопросов.

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

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

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

Шаг 7. Стилизация и скрипты

База знаний

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

  1. Создал новый фиксатор assetsв корневой заглушке.
  2. Внутри папок assetsсоздайте две подпапки: cssи js.
  3. В его ходе cssсоздайте новый файл admin-knowledge-base.cssи добавьте следующий код:
CSSСкопировать код/* Стили для страницы со списком записей базы знаний */
.akb-table {
    width: 100%;
    border-collapse: collapse;
}

.akb-table th,
.akb-table td {
    padding: 10px;
    text-align: left;
    border-bottom: 1px solid #ddd;
}

.akb-table th {
    background-color: #f5f5f5;
    font-weight: bold;
}

.akb-search-form {
    margin-bottom: 20px;
}

.akb-pagination {
    margin-top: 20px;
}

/* Стили для страницы редактирования записи базы знаний */
.akb-meta-box label {
    display: block;
    margin-bottom: 5px;
    font-weight: bold;
}

.akb-meta-box textarea {
    width: 100%;
    max-width: 600px;
}

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

  1. В его ходе jsсоздайте новый файл admin-knowledge-base.jsи добавьте следующий код:
javascriptСкопировать код(function($) {
    $(document).ready(function() {
        // Скрипты для страницы со списком записей базы знаний
        $('.akb-search-form').submit(function(e) {
            e.preventDefault();
            var searchQuery = $('.akb-search-input').val();
            var url = new URL(window.location.href);
            url.searchParams.set('s', searchQuery);
            window.location.href = url.href;
        });

        // Скрипты для страницы редактирования записи базы знаний
        // ...
    });
})(jQuery);

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

  1. Открой файл admin-knowledge-base.phpв корневой папке плагина.
  2. Добавить следующий код в конец файла:
phpСкопировать кодfunction akb_enqueue_admin_assets() {
    wp_enqueue_style( 'akb-admin-style', plugin_dir_url( __FILE__ ) . 'assets/css/admin-knowledge-base.css', array(), '1.0.0' );
    wp_enqueue_script( 'akb-admin-script', plugin_dir_url( __FILE__ ) . 'assets/js/admin-knowledge-base.js', array( 'jquery' ), '1.0.0', true );
}
add_action( 'admin_enqueue_scripts', 'akb_enqueue_admin_assets' );

Эта функция позволяет подключать файлы стилей и скриптов к плагину страниц в админ-панели WordPress. Мы используем функции wp_enqueue_style()и wp_enqueue_script()файлы для регистрации и подключения.

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

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

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

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

Шаг 4. Создание пользовательского интерфейса для управления записями базы знаний

База знаний

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

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

function akb_add_admin_menu() {
    add_menu_page(
        esc_html__( 'Knowledge Base', 'admin-knowledge-base' ),
        esc_html__( 'Knowledge Base', 'admin-knowledge-base' ),
        'edit_posts',
        'akb_knowledge_base',
        'akb_render_admin_page',
        'dashicons-book-alt',
        30
    );
}
add_action( 'admin_menu', 'akb_add_admin_menu' );

function akb_render_admin_page() {
    $current_page = isset( $_GET['paged'] ) ? absint( $_GET['paged'] ) : 1;
    $search_query = isset( $_GET['s'] ) ? sanitize_text_field( $_GET['s'] ) : '';

    $entries_per_page = akb_get_entries_per_page();

    $args = array(
        'post_type'      => 'knowledge_base',
        'posts_per_page' => $entries_per_page,
        'paged'          => $current_page,
        's'              => $search_query,
    );

    $query = new WP_Query( $args );
    ?>
    <div class="wrap">
        <h1 class="wp-heading-inline"><?php esc_html_e( 'Knowledge Base Entries', 'admin-knowledge-base' ); ?></h1>
        <a href="<?php echo esc_url( admin_url( 'post-new.php?post_type=knowledge_base' ) ); ?>" class="page-title-action"><?php esc_html_e( 'Add New', 'admin-knowledge-base' ); ?></a>
        <hr class="wp-header-end">

        <form method="get">
            <p class="search-box">
                <label for="akb-search-input"><?php esc_html_e( 'Search Entries', 'admin-knowledge-base' ); ?>:</label>
                <input type="search" id="akb-search-input" name="s" value="<?php echo esc_attr( $search_query ); ?>">
                <input type="hidden" name="page" value="akb_knowledge_base">
                <input type="submit" id="search-submit" class="button" value="<?php esc_attr_e( 'Search', 'admin-knowledge-base' ); ?>">
            </p>
        </form>

        <table class="wp-list-table widefat fixed striped">
            <thead>
                <tr>
                    <th scope="col"><?php esc_html_e( 'Title', 'admin-knowledge-base' ); ?></th>
                    <th scope="col"><?php esc_html_e( 'Author', 'admin-knowledge-base' ); ?></th>
                    <th scope="col"><?php esc_html_e( 'Date', 'admin-knowledge-base' ); ?></th>
                </tr>
            </thead>
            <tbody>
                <?php
                if ( $query->have_posts() ) :
                    while ( $query->have_posts() ) :
                        $query->the_post();
                        ?>
                        <tr>
                            <td>
                                <strong><a href="<?php echo esc_url( get_edit_post_link() ); ?>"><?php the_title(); ?></a></strong>
                                <div class="row-actions">
                                    <span class="edit"><a href="<?php echo esc_url( get_edit_post_link() ); ?>"><?php esc_html_e( 'Edit', 'admin-knowledge-base' ); ?></a> | </span>
                                    <span class="trash"><a href="<?php echo esc_url( get_delete_post_link() ); ?>"><?php esc_html_e( 'Trash', 'admin-knowledge-base' ); ?></a></span>
                                </div>
                            </td>
                            <td><?php the_author(); ?></td>
                            <td><?php echo esc_html( get_the_date() ); ?></td>
                        </tr>
                        <?php
                    endwhile;
                    wp_reset_postdata();
                else :
                    ?>
                    <tr>
                        <td colspan="3"><?php esc_html_e( 'No entries found.', 'admin-knowledge-base' ); ?></td>
                    </tr>
                    <?php
                endif;
                ?>
            </tbody>
        </table>

        <?php
        $total_pages = $query->max_num_pages;

        if ( $total_pages > 1 ) {
            $current_url = set_url_scheme( 'http://' . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'] );
            $current_url = remove_query_arg( 'paged', $current_url );

            $pagination_args = array(
                'base'               => add_query_arg( 'paged', '%#%', $current_url ),
                'format'             => '',
                'total'              => $total_pages,
                'current'            => $current_page,
                'show_all'           => false,
                'end_size'           => 1,
                'mid_size'           => 2,
                'prev_next'          => true,
                'prev_text'          => __( '&laquo; Previous', 'admin-knowledge-base' ),
                'next_text'          => __( 'Next &raquo;', 'admin-knowledge-base' ),
                'type'               => 'plain',
                'add_args'           => false,
                'add_fragment'       => '',
                'before_page_number' => '',
                'after_page_number'  => '',
            );

            echo '<div class="pagination-links">' . paginate_links( $pagination_args ) . '</div>';
        }
        ?>
    </div>
    <?php
}

function akb_get_entries_per_page() {
    $options = get_option( 'akb_settings' );
    return isset( $options['entries_per_page'] ) ? absint( $options['entries_per_page'] ) : 10;
}
  1. Давайте разберем основные части этого кода:
    • akb_add_admin_menu(): Функция для добавления нового меню «База знаний» в админ-панель WordPress. Она использует функцию add_menu_page() для создания главной страницы меню и привязывает ее к функции akb_render_admin_page().
    • akb_render_admin_page(): Функция для отображения содержимого страницы «База знаний». Она выполняет запрос к базе данных для получения списка записей базы знаний с учетом текущей страницы, поиска и количества записей на странице. Затем она отображает таблицу со списком записей и элементы управления для поиска, пагинации и действий над записями.
    • akb_get_entries_per_page(): Вспомогательная функция для получения количества записей на странице из настроек плагина.
  2. Сохраните файл admin-page.php.
  3. Откройте главный файл плагина admin-knowledge-base.php и добавьте следующий код в конце файла:
phpCopy coderequire_once plugin_dir_path( __FILE__ ) . 'includes/admin-page.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 будет автоматически загружать соответствующие переводы в зависимости от языка сайта.

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

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