/* ACTORS */ // REDIRECTS ACTORS > NEW PERSONS add_action('template_redirect', function () { if (!is_tax('actors')) { return; } $term = get_queried_object(); if (!$term || empty($term->term_id)) { return; } global $wpdb; $tmdb_id = $wpdb->get_var($wpdb->prepare(" SELECT meta_value FROM {$wpdb->termmeta} WHERE term_id = %d AND meta_key = 'actor_id' LIMIT 1 ", $term->term_id)); if (!$tmdb_id) return; $slug = $wpdb->get_var($wpdb->prepare(" SELECT slug FROM wp_persons WHERE tmdb_id = %d LIMIT 1 ", $tmdb_id)); if (!$slug) return; wp_redirect(home_url('/p/' . $slug . '/'), 301); exit; }); add_action('template_redirect', function () { $request = trim(parse_url($_SERVER['REQUEST_URI'], PHP_URL_PATH), '/'); // Ловим и actors/slug, и ua/actors/slug if (!preg_match('#^(?:ua/)?actors/([^/]+)/?$#', $request, $m)) { return; } $actor_slug = sanitize_title($m[1]); global $wpdb; $slug = $wpdb->get_var($wpdb->prepare(" SELECT slug FROM {$wpdb->prefix}persons WHERE slug LIKE %s LIMIT 1 ", $actor_slug . '%')); if (!$slug) { $slug = $wpdb->get_var($wpdb->prepare(" SELECT slug FROM {$wpdb->prefix}persons WHERE slug LIKE %s LIMIT 1 ", '%' . $actor_slug . '%')); } if (!$slug) return; // Сохраняем префикс языка при редиректе $prefix = (strpos($request, 'ua/') === 0) ? '/ua' : ''; wp_redirect(home_url($prefix . '/p/' . $slug . '/'), 301); exit; }); /* META & SEO (Rank Math) */ // Вспомогательная функция для проверки, что мы на странице персоны (RU или UA) function is_person_page_uri() { $uri = strtok($_SERVER['REQUEST_URI'], '?'); return preg_match('~^(?:ua/)?p/[^/]+/?$~', $uri); } // Вспомогательная функция для проверки языка function is_ua_person_uri() { $uri = strtok($_SERVER['REQUEST_URI'], '?'); return strpos($uri, '/ua/') === 0; } add_filter('rank_math/frontend/title', function ($title) { if (!is_person_page_uri()) return $title; $person = get_query_var('person'); if (!$person) return $title; $is_ua = is_ua_person_uri(); $name = $is_ua ? ($person['name_ua'] ?: $person['name_ru'] ?: $person['original_name']) : ($person['name_ru'] ?: $person['original_name']); $site = get_bloginfo('name'); $dept = $person['known_for_department'] ?? ''; if (stripos($dept, 'Direct') !== false) { return $is_ua ? "{$name} — фільми та серіали режисера | {$site}" : "{$name} — фильмы и сериалы режиссёра | {$site}"; } if (stripos($dept, 'Act') !== false) { return $is_ua ? "{$name} — фільми та серіали за участю | {$site}" : "{$name} — фильмы и сериалы с участием | {$site}"; } return $is_ua ? "{$name} — фільмографія | {$site}" : "{$name} — фильмография | {$site}"; }); add_filter('rank_math/frontend/description', function ($description) { if (!is_person_page_uri()) return $description; $person = get_query_var('person'); if (!$person) return $description; $is_ua = is_ua_person_uri(); $name = $is_ua ? ($person['name_ua'] ?: $person['name_ru'] ?: $person['original_name']) : ($person['name_ru'] ?: $person['original_name']); $site = get_bloginfo('name'); $dept = $person['known_for_department'] ?? ''; $age = null; if (!empty($person['birthday']) && $person['birthday'] !== '0000-00-00') { try { $age = (new DateTime($person['birthday']))->diff(new DateTime())->y; } catch (\Exception $e) {} } if (stripos($dept, 'Direct') !== false) { $role_text = $is_ua ? "режисера" : "режиссёра"; } elseif (stripos($dept, 'Act') !== false) { $role_text = $is_ua ? "за участю" : "с участием"; } elseif (stripos($dept, 'Produc') !== false) { $role_text = $is_ua ? "продюсера" : "продюсера"; } elseif (stripos($dept, 'Writ') !== false) { $role_text = $is_ua ? "сценариста" : "сценариста"; } else { $role_text = $is_ua ? "фільмографія" : "фильмография"; } $desc = $is_ua ? "Фільми та серіали {$role_text} {$name} на {$site}." : "Фильмы и сериалы {$role_text} {$name} на {$site}."; if ($age) { $desc .= $is_ua ? " Біографія, вік ({$age} років), місце народження та фільмографія." : " Биография, возраст ({$age} лет), место рождения и фильмография."; } else { $desc .= $is_ua ? " Біографія, місце народження та фільмографія." : " Биография, место рождения и фильмография."; } if (!empty($person['imdb_id']) || !empty($person['instagram_id'])) { $desc .= $is_ua ? " Соціальні мережі та сторінки на IMDb." : " Социальные сети и страницы на IMDb."; } return $desc; }); add_filter('rank_math/frontend/canonical', function ($canonical) { if (!is_person_page_uri()) return $canonical; return home_url(strtok($_SERVER['REQUEST_URI'], '?')); }); add_filter('rank_math/frontend/robots', function ($robots) { if (!is_person_page_uri()) return $robots; $person = get_query_var('person'); if (!$person) return $robots; global $wpdb; $movie_count = (int)$wpdb->get_var($wpdb->prepare("SELECT COUNT(DISTINCT c.media_id) FROM wp_cast c WHERE c.person_id = %d AND c.media_type = 'movie'", $person['tmdb_id'])); $tv_count = (int)$wpdb->get_var($wpdb->prepare("SELECT COUNT(DISTINCT c.media_id) FROM wp_cast c WHERE c.person_id = %d AND c.media_type = 'tv'", $person['tmdb_id'])); $total_works = $movie_count + $tv_count; $has_birthday = !empty($person['birthday']) && $person['birthday'] !== '0000-00-00'; $has_photo = !empty($person['profile_path']); $should_noindex = (!$has_birthday && !$has_photo) || ($total_works < 3); if (!empty($_GET['sort']) && $_GET['sort'] !== 'newest') { return ['index' => 'noindex', 'follow' => 'follow']; } if ($should_noindex) { return ['index' => 'noindex', 'follow' => 'follow']; } return ['index' => 'index', 'follow' => 'follow']; }); // Отключаем canonical redirect для /p/* и /ua/p/* add_filter('redirect_canonical', function ($redirect_url) { $uri = strtok($_SERVER['REQUEST_URI'], '?'); if (preg_match('~^(?:ua/)?p/[^/]+/?$~', $uri)) { return false; } return $redirect_url; }); // Перехват /p/{slug} и /ua/p/{slug} add_action('template_redirect', function () { $uri = strtok($_SERVER['REQUEST_URI'], '?'); // 0. Нас интересуют ТОЛЬКО URL вида /p/... или /ua/p/... if (strpos($uri, '/p/') === false) { return; } // 1. Регулярка, которая ловит и /p/slug, и /ua/p/slug // (?:ua/)? означает "необязательная группа ua/" в начале if (!preg_match('~^(?:ua/)?p/([a-z0-9\-]+)/?$~', $uri, $m)) { if (preg_match('~^/p/[^/]+/?$~', $uri)) { status_header(404); exit; } return; } $raw = $m[1]; $clean = sanitize_title($raw); // 2. SEO-редирект с грязного slug → чистый (СОХРАНЯЕМ префикс языка!) if ($raw !== $clean) { $prefix = (strpos($uri, '/ua/') === 0) ? '/ua' : ''; wp_redirect(home_url($prefix . '/p/' . $clean . '/'), 301); exit; } global $wpdb; $slug = $raw; $person = $wpdb->get_row($wpdb->prepare("SELECT * FROM wp_persons WHERE slug = %s LIMIT 1", $slug), ARRAY_A); if (!$person) { status_header(404); nocache_headers(); exit; } set_query_var('person', $person); // 3. Fake post для корректной работы WordPress и SEO плагинов global $wp_query, $post; // Определяем имя для fake post (приоритет языку, если это UA) $is_ua = (strpos($uri, '/ua/') === 0); $display_name = $is_ua ? ($person['name_ua'] ?: $person['name_ru'] ?: $person['original_name']) : ($person['name_ru'] ?: $person['original_name']); $post = (object) [ 'ID' => 0, 'post_author' => 1, 'post_date' => current_time('mysql'), 'post_date_gmt' => current_time('mysql', 1), 'post_content' => '', 'post_title' => $display_name, 'post_excerpt' => '', 'post_status' => 'publish', 'comment_status' => 'closed', 'ping_status' => 'closed', 'post_password' => '', 'post_name' => $person['slug'], 'to_ping' => '', 'pinged' => '', 'post_modified' => current_time('mysql'), 'post_modified_gmt' => current_time('mysql', 1), 'post_parent' => 0, 'guid' => home_url(strtok($_SERVER['REQUEST_URI'], '?')), 'menu_order' => 0, 'post_type' => 'page', 'post_mime_type' => '', 'comment_count' => 0, ]; $wp_query->post = $post; $wp_query->posts = [$post]; $wp_query->post_count = 1; $wp_query->is_404 = false; $wp_query->is_page = true; $wp_query->is_singular = true; status_header(200); nocache_headers(); include get_theme_file_path('page-person.php'); exit; }); /* END ACTORS */ Время Евы ONA, сериал (2008 – 2009) - Новые Серии, Трейлер онлайн, Актеры

График выхода всех сезонов и серий — Время Евы ONA (2008)

Будет ли новый сезон сериала «Время Евы ONA»?

Нет, продолжения не будет. Статус сериала — завершён.

Сериал состоит из 0 сезонов.