Files
vij/helpers/number_title.php
2026-02-07 11:05:31 +03:00

166 lines
4.9 KiB
PHP
Raw Permalink 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
function number_info($title, $post_id = 0) {
$res = [];
$items = explode(' ', $title);
// Инициализируем переменные
$res['year'] = isset($items[4]) ? $items[4] : '';
$res['number'] = '';
$res['guid'] = '';
// Проверяем PDF в метаполях
$pdf_url = get_post_meta($post_id, '_pdf_file', true);
if ($pdf_url) {
$res['guid'] = esc_url($pdf_url);
return $res;
}
// Извлекаем номер
if (isset($items[2])) {
$res['number'] = substr($items[2], 1, strlen($items[2]) - 2);
}
// Формируем имя для поиска
$month = isset($items[3]) ? ru2enmonths($items[3]) : '';
$year = isset($items[4]) ? $items[4] : '';
if ($res['number'] && $month && $year) {
$name = 'vizh_' . $res['number'] . '_' . $month . '_' . $year;
// Используем стандартные методы WordPress для поиска поста
$findpdf = get_posts([
'name' => $name,
'post_type' => 'attachment',
'post_status' => 'inherit',
'post_mime_type' => 'application/pdf',
'posts_per_page' => 1,
'orderby' => 'post_modified',
'order' => 'DESC'
]);
if (!empty($findpdf)) {
$post = $findpdf[0];
$res['guid'] = get_the_guid($post->ID);
// Альтернативно можно получить URL через permalink
// $res['guid'] = get_permalink($post->ID);
}
}
return $res;
}
// Альтернативная версия с использованием WP_Query
function number_info_alt($title, $post_id = 0) {
$res = [];
$items = explode(' ', $title);
$res['year'] = isset($items[4]) ? $items[4] : '';
$res['number'] = '';
$res['guid'] = '';
// Проверяем PDF в метаполях
$pdf_url = get_post_meta($post_id, '_pdf_file', true);
if ($pdf_url) {
$res['guid'] = esc_url($pdf_url);
return $res;
}
// Извлекаем номер
if (isset($items[2])) {
$res['number'] = substr($items[2], 1, strlen($items[2]) - 2);
}
// Формируем имя для поиска
$month = isset($items[3]) ? ru2enmonths($items[3]) : '';
$year = isset($items[4]) ? $items[4] : '';
if ($res['number'] && $month && $year) {
$name = 'vizh_' . $res['number'] . '_' . $month . '_' . $year;
// Используем WP_Query для более гибкого поиска
$query = new WP_Query([
'name' => $name,
'post_type' => 'any',
'post_status' => 'publish',
'posts_per_page' => 1,
'orderby' => 'modified',
'order' => 'DESC'
]);
if ($query->have_posts()) {
$query->the_post();
$res['guid'] = get_the_guid();
wp_reset_postdata();
}
}
return $res;
}
function ru2enmonths($str) {
$ruMonths = [
'январь', 'февраль', 'март', 'апрель', 'май', 'июнь',
'июль', 'август', 'сентябрь', 'октябрь', 'ноябрь', 'декабрь'
];
$enMonths = [
'january', 'february', 'march', 'april', 'may', 'june',
'july', 'august', 'september', 'october', 'november', 'december'
];
$enDate = str_ireplace($ruMonths, $enMonths, $str);
return $enDate;
}
// Еще более безопасная версия с проверкой slug
function number_info_safe($title, $post_id = 0) {
$res = [
'year' => '',
'number' => '',
'guid' => ''
];
$items = explode(' ', $title);
// Проверяем PDF в метаполях
$pdf_url = get_post_meta($post_id, '_pdf_file', true);
if ($pdf_url) {
$res['guid'] = esc_url($pdf_url);
return $res;
}
// Безопасное извлечение данных
if (count($items) >= 5) {
$res['year'] = sanitize_text_field($items[4]);
if (isset($items[2])) {
$res['number'] = substr($items[2], 1, strlen($items[2]) - 2);
}
$month = ru2enmonths($items[3]);
$name = 'vizh_' . $res['number'] . '_' . $month . '_' . $res['year'];
// Ищем пост по slug
$args = [
'name' => $name,
'post_type' => 'any',
'post_status' => 'publish',
'posts_per_page' => 1,
'orderby' => 'modified',
'order' => 'DESC'
];
$posts = get_posts($args);
if (!empty($posts)) {
$post = $posts[0];
$res['guid'] = get_permalink($post->ID); // Лучше использовать permalink чем guid
}
}
return $res;
}