В 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 будет автоматически загружать соответствующие переводы в зависимости от языка сайта.

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

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