Files
sportpressa_backend/functions.php

256 lines
8.3 KiB
PHP
Raw Normal View History

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