correct data
This commit is contained in:
@@ -1,46 +1,166 @@
|
||||
<?php
|
||||
|
||||
function number_info($title, $post_id = 0){
|
||||
|
||||
function number_info($title, $post_id = 0) {
|
||||
$res = [];
|
||||
|
||||
$items = explode(' ', $title);
|
||||
|
||||
$res['year'] = $items[4];
|
||||
$res['number'] = $number;
|
||||
// Инициализируем переменные
|
||||
$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;
|
||||
}
|
||||
|
||||
$number = substr($items[2], 1, strlen($items[2]) - 2);
|
||||
$name = 'vizh_'.$number.'_'.ru2enmonths($items[3]).'_'.$items[4];
|
||||
|
||||
//echo '<p>'.$name.'</p>';
|
||||
// Извлекаем номер
|
||||
if (isset($items[2])) {
|
||||
$res['number'] = substr($items[2], 1, strlen($items[2]) - 2);
|
||||
}
|
||||
|
||||
$findpdf = db_get("SELECT * FROM `wp_posts` WHERE `post_name` = '$name' ORDER BY `post_modified` DESC LIMIT 1");
|
||||
//echo "SELECT * FROM `wp_posts` WHERE `post_name` = '$name' ORDER BY `post_modified` DESC LIMIT 1";
|
||||
// Формируем имя для поиска
|
||||
$month = isset($items[3]) ? ru2enmonths($items[3]) : '';
|
||||
$year = isset($items[4]) ? $items[4] : '';
|
||||
|
||||
if ($res['number'] && $month && $year) {
|
||||
$name = 'vizh_' . $res['number'] . '_' . $month . '_' . $year;
|
||||
|
||||
if (isset($findpdf['guid'])){
|
||||
$res['guid'] = $findpdf['guid'];
|
||||
}
|
||||
|
||||
// Используем стандартные методы 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'
|
||||
]);
|
||||
|
||||
return $res;
|
||||
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 = [];
|
||||
|
||||
function ru2enmonths($str){
|
||||
$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] : '';
|
||||
|
||||
$ruMonths = ['январь', 'февраль', 'март', 'апрель', 'май', 'июнь', 'июль', 'август', 'сентябрь', 'октябрь', 'ноябрь', 'декабрь'];
|
||||
$enMonths = ['january', 'february', 'march', 'april', 'may', 'june', 'july', 'august', 'september', 'october', 'november', 'december'];
|
||||
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;
|
||||
}
|
||||
Reference in New Issue
Block a user