137 lines
5.1 KiB
PHP
137 lines
5.1 KiB
PHP
<?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');
|
||
|
||
|