2026-01-08 20:53:00 +03:00
|
|
|
|
<?php
|
|
|
|
|
|
|
|
|
|
|
|
if (! defined( 'ABSPATH' )) {
|
|
|
|
|
|
exit;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
require_once 'vite.config.php';
|
|
|
|
|
|
|
|
|
|
|
|
function theme_setup() {
|
|
|
|
|
|
|
|
|
|
|
|
add_theme_support( 'post-thumbnails' );
|
|
|
|
|
|
|
|
|
|
|
|
add_theme_support( 'menus' );
|
|
|
|
|
|
register_nav_menus( array(
|
|
|
|
|
|
'primary-menu' => __( 'Primary Menu', 'my-theme' ),
|
|
|
|
|
|
'footer-menu' => __( 'Footer Menu', 'my-theme' )
|
|
|
|
|
|
) );
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
add_action( 'after_setup_theme', 'theme_setup' );
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//crops
|
|
|
|
|
|
function my_custom_image_sizes() {
|
|
|
|
|
|
add_image_size( 'small-thumbnail', 300, 200, true ); // Кроп до 300x200
|
|
|
|
|
|
add_image_size( 'medium-thumbnail', 600, 400, true ); // Кроп до 600x400
|
|
|
|
|
|
add_image_size( 'large-thumbnail', 1200, 800, true ); // Кроп до 1200x800
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
//add_action( 'after_setup_theme', 'my_custom_image_sizes' );
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// Создание нового типа записи "Каталог"
|
|
|
|
|
|
function register_catalog_post_type() {
|
|
|
|
|
|
$labels = array(
|
|
|
|
|
|
'name' => 'Каталог',
|
|
|
|
|
|
'singular_name' => 'Элемент каталога',
|
|
|
|
|
|
'menu_name' => 'Каталог',
|
|
|
|
|
|
'name_admin_bar' => 'Элемент каталога',
|
|
|
|
|
|
'add_new' => 'Добавить новый',
|
|
|
|
|
|
'add_new_item' => 'Добавить новый элемент каталога',
|
|
|
|
|
|
'new_item' => 'Новый элемент каталога',
|
|
|
|
|
|
'edit_item' => 'Редактировать элемент каталога',
|
|
|
|
|
|
'view_item' => 'Просмотреть элемент каталога',
|
|
|
|
|
|
'all_items' => 'Все элементы каталога',
|
|
|
|
|
|
'search_items' => 'Искать в каталоге',
|
|
|
|
|
|
'parent_item_colon' => 'Родительский элемент:',
|
|
|
|
|
|
'not_found' => 'Элементы каталога не найдены.',
|
|
|
|
|
|
'not_found_in_trash' => 'В корзине элементы каталога не найдены.'
|
|
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
|
|
$args = array(
|
|
|
|
|
|
'labels' => $labels,
|
|
|
|
|
|
'public' => true,
|
|
|
|
|
|
'publicly_queryable' => true,
|
|
|
|
|
|
'show_ui' => true,
|
|
|
|
|
|
'show_in_menu' => true,
|
|
|
|
|
|
'query_var' => true,
|
|
|
|
|
|
'rewrite' => array('slug' => 'catalog'),
|
|
|
|
|
|
'capability_type' => 'post',
|
|
|
|
|
|
'has_archive' => true,
|
|
|
|
|
|
'hierarchical' => false,
|
|
|
|
|
|
'menu_position' => 5,
|
|
|
|
|
|
'menu_icon' => 'dashicons-products',
|
|
|
|
|
|
'supports' => array('title', 'editor', 'thumbnail', 'excerpt', 'comments', 'custom-fields'),
|
|
|
|
|
|
'taxonomies' => array('category') // Подключаем стандартные категории
|
|
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
|
|
register_post_type('catalog', $args);
|
|
|
|
|
|
}
|
|
|
|
|
|
add_action('init', 'register_catalog_post_type');
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
function get_first_subcategory( $post_id ) {
|
|
|
|
|
|
// Получаем все категории поста
|
|
|
|
|
|
$categories = get_the_category( $post_id );
|
|
|
|
|
|
|
|
|
|
|
|
if ( !empty( $categories ) ) {
|
|
|
|
|
|
// Проходим по каждой категории
|
|
|
|
|
|
foreach ( $categories as $category ) {
|
|
|
|
|
|
// Проверяем, является ли категория подрубрикой (если у неё есть родитель)
|
|
|
|
|
|
if ( $category->parent != 0 ) {
|
|
|
|
|
|
// Возвращаем массив с названием и ссылкой на подрубрику
|
|
|
|
|
|
return array(
|
|
|
|
|
|
'name' => esc_html( $category->name ),
|
|
|
|
|
|
'url' => get_category_link( $category->term_id ),
|
|
|
|
|
|
);
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// Если подрубрика не найдена, возвращаем null
|
|
|
|
|
|
return null;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
function custom_posts_per_page($query) {
|
|
|
|
|
|
if (!is_admin() && $query->is_main_query()) {
|
|
|
|
|
|
|
|
|
|
|
|
// Для главной страницы
|
|
|
|
|
|
if (is_home() || is_front_page()) {
|
|
|
|
|
|
$query->set('cat', 174);
|
|
|
|
|
|
$query->set('posts_per_page', 18);
|
|
|
|
|
|
$query->set('post_status', 'publish');
|
|
|
|
|
|
$query->set('ignore_sticky_posts', 1);
|
|
|
|
|
|
$query->set('meta_query', array(
|
|
|
|
|
|
array(
|
|
|
|
|
|
'key' => '_thumbnail_id',
|
|
|
|
|
|
'compare' => 'EXISTS'
|
|
|
|
|
|
)
|
|
|
|
|
|
));
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// Для архивов рубрик и тегов
|
|
|
|
|
|
if (is_category() || is_tag()) {
|
|
|
|
|
|
$query->set('posts_per_page', 18);
|
|
|
|
|
|
$query->set('meta_query', array(
|
|
|
|
|
|
array(
|
|
|
|
|
|
'key' => '_thumbnail_id',
|
|
|
|
|
|
'compare' => 'EXISTS'
|
|
|
|
|
|
)
|
|
|
|
|
|
));
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
add_action('pre_get_posts', 'custom_posts_per_page');
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// Добавляем slug категории в body class для архивов и постов
|
|
|
|
|
|
function add_category_slug_to_body_class($classes) {
|
|
|
|
|
|
// Для архивов рубрик
|
|
|
|
|
|
if (is_category()) {
|
|
|
|
|
|
$category = get_queried_object();
|
|
|
|
|
|
|
|
|
|
|
|
// Рубрики с обрезкой (cover) - укажите slug нужных рубрик
|
|
|
|
|
|
$cover_categories = array('news');
|
|
|
|
|
|
|
|
|
|
|
|
$is_cover = false;
|
|
|
|
|
|
|
|
|
|
|
|
if (in_array($category->slug, $cover_categories)) {
|
|
|
|
|
|
$is_cover = true;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
if (!$is_cover && $category->parent) {
|
|
|
|
|
|
$parent_id = $category->parent;
|
|
|
|
|
|
while ($parent_id) {
|
|
|
|
|
|
$parent = get_category($parent_id);
|
|
|
|
|
|
if (in_array($parent->slug, $cover_categories)) {
|
|
|
|
|
|
$is_cover = true;
|
|
|
|
|
|
break;
|
|
|
|
|
|
}
|
|
|
|
|
|
$parent_id = $parent->parent;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
if (!$is_cover) {
|
|
|
|
|
|
$classes[] = 'image-portrait';
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// Для одиночных постов
|
|
|
|
|
|
if (is_single()) {
|
|
|
|
|
|
$categories = get_the_category();
|
|
|
|
|
|
|
|
|
|
|
|
// Рубрики с обрезкой (cover)
|
|
|
|
|
|
$cover_categories = array('news');
|
|
|
|
|
|
|
|
|
|
|
|
$is_cover = false;
|
|
|
|
|
|
|
|
|
|
|
|
foreach ($categories as $category) {
|
|
|
|
|
|
if (in_array($category->slug, $cover_categories)) {
|
|
|
|
|
|
$is_cover = true;
|
|
|
|
|
|
break;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// Проверяем родительские категории
|
|
|
|
|
|
if (!$is_cover && $category->parent) {
|
|
|
|
|
|
$parent_id = $category->parent;
|
|
|
|
|
|
while ($parent_id) {
|
|
|
|
|
|
$parent = get_category($parent_id);
|
|
|
|
|
|
if (in_array($parent->slug, $cover_categories)) {
|
|
|
|
|
|
$is_cover = true;
|
|
|
|
|
|
break;
|
|
|
|
|
|
}
|
|
|
|
|
|
$parent_id = $parent->parent;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
if ($is_cover) break;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
if (!$is_cover) {
|
|
|
|
|
|
$classes[] = 'image-portrait';
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
return $classes;
|
|
|
|
|
|
}
|
|
|
|
|
|
add_filter('body_class', 'add_category_slug_to_body_class');
|
|
|
|
|
|
|
|
|
|
|
|
// Добавляем классы к каждому посту в цикле для архивов тегов
|
|
|
|
|
|
function add_category_class_to_posts($classes, $class, $post_id) {
|
|
|
|
|
|
// Только для архивов тегов
|
|
|
|
|
|
if (is_tag()) {
|
|
|
|
|
|
$categories = get_the_category($post_id);
|
|
|
|
|
|
|
|
|
|
|
|
// Рубрики с обрезкой (cover)
|
|
|
|
|
|
$cover_categories = array('news');
|
|
|
|
|
|
|
|
|
|
|
|
$is_cover = false;
|
|
|
|
|
|
|
|
|
|
|
|
foreach ($categories as $category) {
|
|
|
|
|
|
if (in_array($category->slug, $cover_categories)) {
|
|
|
|
|
|
$is_cover = true;
|
|
|
|
|
|
break;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// Проверяем родительские категории
|
|
|
|
|
|
if (!$is_cover && $category->parent) {
|
|
|
|
|
|
$parent_id = $category->parent;
|
|
|
|
|
|
while ($parent_id) {
|
|
|
|
|
|
$parent = get_category($parent_id);
|
|
|
|
|
|
if (in_array($parent->slug, $cover_categories)) {
|
|
|
|
|
|
$is_cover = true;
|
|
|
|
|
|
break;
|
|
|
|
|
|
}
|
|
|
|
|
|
$parent_id = $parent->parent;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
if ($is_cover) break;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
if (!$is_cover) {
|
|
|
|
|
|
$classes[] = 'image-portrait';
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
return $classes;
|
|
|
|
|
|
}
|
|
|
|
|
|
add_filter('post_class', 'add_category_class_to_posts', 10, 3);
|
|
|
|
|
|
|
|
|
|
|
|
|
2026-01-10 10:34:14 +03:00
|
|
|
|
require_once 'inc/opengraph.php'; //опенграф
|
|
|
|
|
|
require_once 'inc/postdate.php'; //постдаты
|
2026-01-09 21:46:49 +03:00
|
|
|
|
|
|
|
|
|
|
|
2026-01-08 20:53:00 +03:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|