Files
sportpressa_backend/functions.php
2026-01-10 10:34:14 +03:00

256 lines
8.3 KiB
PHP
Executable File
Raw 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
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);
require_once 'inc/opengraph.php'; //опенграф
require_once 'inc/postdate.php'; //постдаты