add files
This commit is contained in:
251
functions.php
Executable file
251
functions.php
Executable file
@@ -0,0 +1,251 @@
|
||||
<?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);
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user