Files
vij/helpers/number_title.php

166 lines
4.9 KiB
PHP
Raw Normal View History

2021-11-21 13:14:07 +03:00
<?php
2026-02-07 11:05:31 +03:00
function number_info($title, $post_id = 0) {
2021-11-21 22:00:02 +03:00
$res = [];
2021-11-21 13:14:07 +03:00
$items = explode(' ', $title);
2026-02-07 11:05:31 +03:00
// Инициализируем переменные
$res['year'] = isset($items[4]) ? $items[4] : '';
$res['number'] = '';
$res['guid'] = '';
2025-09-03 00:00:47 +03:00
2026-02-07 11:05:31 +03:00
// Проверяем PDF в метаполях
2025-09-03 00:00:47 +03:00
$pdf_url = get_post_meta($post_id, '_pdf_file', true);
if ($pdf_url) {
$res['guid'] = esc_url($pdf_url);
return $res;
}
2026-02-07 11:05:31 +03:00
// Извлекаем номер
if (isset($items[2])) {
$res['number'] = substr($items[2], 1, strlen($items[2]) - 2);
}
2021-11-21 13:14:07 +03:00
2026-02-07 11:05:31 +03:00
// Формируем имя для поиска
$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);
}
}
2025-09-03 00:00:47 +03:00
2026-02-07 11:05:31 +03:00
return $res;
}
2021-11-21 13:14:07 +03:00
2026-02-07 11:05:31 +03:00
// Альтернативная версия с использованием WP_Query
function number_info_alt($title, $post_id = 0) {
$res = [];
2021-11-21 13:14:07 +03:00
2026-02-07 11:05:31 +03:00
$items = explode(' ', $title);
2021-11-21 13:14:07 +03:00
2026-02-07 11:05:31 +03:00
$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);
}
2021-11-21 13:14:07 +03:00
2026-02-07 11:05:31 +03:00
// Формируем имя для поиска
$month = isset($items[3]) ? ru2enmonths($items[3]) : '';
$year = isset($items[4]) ? $items[4] : '';
2021-11-21 13:14:07 +03:00
2026-02-07 11:05:31 +03:00
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'
];
2021-11-21 13:14:07 +03:00
$enDate = str_ireplace($ruMonths, $enMonths, $str);
return $enDate;
}
2026-02-07 11:05:31 +03:00
// Еще более безопасная версия с проверкой 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;
}