Files
sportpressa_backend/inc/postdate.php

137 lines
5.1 KiB
PHP
Raw Normal View History

2026-01-10 10:34:14 +03:00
<?php
function create_postdaty_post_type() {
register_post_type('postdaty',
array(
'labels' => array(
'name' => __('Постдаты'),
'singular_name' => __('Постдата'),
'add_new' => __('Добавить постдату'),
'add_new_item' => __('Добавить новую постдату'),
'edit_item' => __('Редактировать постдату'),
'new_item' => __('Новая постдата'),
'view_item' => __('Посмотреть постдату'),
'search_items' => __('Искать постдаты'),
'not_found' => __('Постдат не найдено'),
'not_found_in_trash' => __('В корзине постдат не найдено'),
'all_items' => __('Все постдаты'),
'menu_name' => __('Постдаты')
),
'public' => true,
'has_archive' => true,
'supports' => array('title', 'editor'), // Убрали 'custom-fields'
'menu_icon' => 'dashicons-calendar-alt',
'rewrite' => array('slug' => 'postdaty')
)
);
}
add_action('init', 'create_postdaty_post_type');
// Добавление метабокса
function add_postdata_date_meta_box() {
add_meta_box(
'postdata_date_meta_box',
'Дата события',
'postdata_date_meta_box_html',
'postdaty',
'side',
'default'
);
}
add_action('add_meta_boxes', 'add_postdata_date_meta_box');
// HTML метабокса
function postdata_date_meta_box_html($post) {
$event_date = get_post_meta($post->ID, '_postdata_event_date', true);
wp_nonce_field('postdata_date_nonce', 'postdata_date_nonce_field');
?>
<label for="postdata_event_date">Выберите дату:</label>
<input name="postdata_event_date" type="date" value="<?php echo esc_attr($event_date); ?>" style="width:100%;">
<?php
}
// Сохранение даты
function save_postdata_date_meta($post_id) {
if (!isset($_POST['postdata_date_nonce_field']) ||
!wp_verify_nonce($_POST['postdata_date_nonce_field'], 'postdata_date_nonce')) {
return;
}
if (array_key_exists('postdata_event_date', $_POST)) {
update_post_meta(
$post_id,
'_postdata_event_date',
sanitize_text_field($_POST['postdata_event_date'])
);
}
}
add_action('save_post', 'save_postdata_date_meta');
// Добавление метабокса связи
function add_postdata_biography_meta_box() {
add_meta_box(
'postdata_biography_meta_box',
'Связанная биография',
'postdata_biography_meta_box_html',
'postdaty',
'side',
'default'
);
}
add_action('add_meta_boxes', 'add_postdata_biography_meta_box');
// HTML метабокса
function postdata_biography_meta_box_html($post) {
$related_post_id = get_post_meta($post->ID, '_postdata_related_biography', true);
wp_nonce_field('postdata_biography_nonce', 'postdata_biography_nonce_field');
// Получаем посты только из рубрики 10723
$biographies = get_posts(array(
'post_type' => 'post',
'posts_per_page' => -1,
'orderby' => 'title',
'order' => 'ASC',
'cat' => 10723 // ID рубрики
));
?>
<label for="postdata_related_biography">ID или выбор поста:</label>
<input type="number" name="postdata_related_biography_id"
value="<?php echo esc_attr($related_post_id); ?>"
placeholder="Введите ID поста" style="width:100%; margin-bottom:10px;">
<select name="postdata_related_biography" style="width:100%;">
<option value="">-- Или выберите из списка --</option>
<?php foreach($biographies as $bio): ?>
<option value="<?php echo $bio->ID; ?>" <?php selected($related_post_id, $bio->ID); ?>>
<?php echo esc_html($bio->post_title); ?> (ID: <?php echo $bio->ID; ?>)
</option>
<?php endforeach; ?>
</select>
<p style="font-size:11px; color:#666; margin-top:5px;">
Показаны только посты из рубрики биографий
</p>
<?php
}
// Сохранение связи (без изменений)
function save_postdata_biography_meta($post_id) {
if (!isset($_POST['postdata_biography_nonce_field']) ||
!wp_verify_nonce($_POST['postdata_biography_nonce_field'], 'postdata_biography_nonce')) {
return;
}
$biography_id = '';
if (!empty($_POST['postdata_related_biography_id'])) {
$biography_id = sanitize_text_field($_POST['postdata_related_biography_id']);
} elseif (!empty($_POST['postdata_related_biography'])) {
$biography_id = sanitize_text_field($_POST['postdata_related_biography']);
}
update_post_meta($post_id, '_postdata_related_biography', $biography_id);
}
add_action('save_post', 'save_postdata_biography_meta');