Files
agroexpert/inc/spravochniki.php
2025-09-03 00:13:32 +03:00

140 lines
5.2 KiB
PHP
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<?php
function agro_register_spravochniki_post_type() {
// Таксономия: рубрики справочников
register_taxonomy('spravochnik_category', 'spravochniki', [
'labels' => [
'name' => 'Категории справочников',
'singular_name' => 'Категория справочника',
'search_items' => 'Искать категории',
'all_items' => 'Все категории',
'parent_item' => 'Родительская категория',
'parent_item_colon' => 'Родительская категория:',
'edit_item' => 'Редактировать категорию',
'update_item' => 'Обновить категорию',
'add_new_item' => 'Добавить новую категорию',
'new_item_name' => 'Новое имя категории',
'menu_name' => 'Категории',
],
'public' => true,
'hierarchical' => true,
'rewrite' => [
'slug' => 'spravochniki/category',
'with_front' => false,
'hierarchical' => true
],
'show_admin_column' => true,
'show_in_rest' => true,
]);
register_post_type('spravochniki', [
'labels' => [
'menu_name' => 'Справочники',
'name' => 'Статьи',
'singular_name' => 'Статья',
'add_new' => 'Добавить статью',
'add_new_item' => 'Добавить новую статью',
'edit_item' => 'Редактировать статью',
'new_item' => 'Новая статья',
'view_item' => 'Посмотреть статью',
'search_items' => 'Искать статью',
'not_found' => 'Не найдено',
'not_found_in_trash' => 'В корзине не найдено',
],
'public' => true,
'has_archive' => 'spravochniki',
'hierarchical' => false, // Для записей обычно false
'rewrite' => [
'slug' => 'spravochniki',
'with_front' => false,
'pages' => true
],
'supports' => ['title', 'editor', 'excerpt', 'thumbnail'],
'taxonomies' => ['spravochnik_category'],
'show_in_rest' => true,
'menu_icon' => 'dashicons-book-alt',
]);
}
add_action('init', 'agro_register_spravochniki_post_type', 0); // Приоритет 0 для ранней регистрации
// 3. Правила перезаписи (упрощенные)
function agro_custom_rewrite_rules() {
// Главная страница справочников
add_rewrite_rule('^spravochniki/?$', 'index.php?post_type=spravochniki', 'top');
// Пагинация архива
add_rewrite_rule('^spravochniki/page/([0-9]+)/?$', 'index.php?post_type=spravochniki&paged=$matches[1]', 'top');
// Одиночные записи
add_rewrite_rule('^spravochniki/([^/]+)/?$', 'index.php?spravochniki=$matches[1]', 'top');
// Категории 1 уровня
add_rewrite_rule('^spravochniki/category/([^/]+)/?$', 'index.php?spravochnik_category=$matches[1]', 'top');
// Категории 2 уровня (иерархические)
add_rewrite_rule('^spravochniki/category/([^/]+)/([^/]+)/?$', 'index.php?spravochnik_category=$matches[2]', 'top');
}
add_action('init', 'agro_custom_rewrite_rules', 20);
// Подзаголовок
function agro_allow_meta_boxes_in_gutenberg($use_block_editor, $post_type) {
if ($post_type === 'spravochniki') {
return true; // разрешаем Gutenberg
}
return $use_block_editor;
}
add_filter('use_block_editor_for_post_type', 'agro_allow_meta_boxes_in_gutenberg', 10, 2);
function agro_add_spravochnik_subtitle_meta_box() {
add_meta_box(
'agro_spravochnik_subtitle',
'Подзаголовок',
'agro_spravochnik_subtitle_callback',
'spravochniki',
'side',
'high' // <-- вот здесь!
);
}
add_action('add_meta_boxes', 'agro_add_spravochnik_subtitle_meta_box');
function agro_spravochnik_subtitle_callback($post) {
$subtitle = get_post_meta($post->ID, '_spravochnik_subtitle', true);
echo '<input type="text" name="spravochnik_subtitle" value="' . esc_attr($subtitle) . '" style="width:100%;" />';
}
function agro_save_spravochnik_subtitle($post_id) {
if (array_key_exists('spravochnik_subtitle', $_POST)) {
update_post_meta($post_id, '_spravochnik_subtitle', sanitize_text_field($_POST['spravochnik_subtitle']));
}
}
add_action('save_post', 'agro_save_spravochnik_subtitle');
add_action('pre_get_posts', 'modify_taxonomy_query');
function modify_taxonomy_query($query) {
// Только для главного запроса таксономии
if (!is_admin() && $query->is_main_query() && is_tax('spravochnik_category')) {
$query->set('posts_per_page', 9); // Ваш лимит
$query->set('orderby', 'title'); // Пример сортировки
$query->set('order', 'ASC'); // Пример порядка
}
}