Вопрос или проблема
Мне нужно определить пользовательскую функцию поддержки для моего плагина WordPress, но я не могу найти, как это сделать.
Я хочу отобразить поле на определенном пользовательском типе записи, содержащее 2 метаполя, в которые пользователи могут вводить значения долготы и широты для целей геолокации.
Для практического использования я хочу прикрепить эту пользовательскую функцию так же, как поддержка добавляется к записям:
<?php
$args = array(
...
...
'supports' => array('title','editor', 'thumbnail', 'my_custom_support'),
...
...
);
register_post_type('my_custom_post_type', $args);
?>
ИЛИ, если мой пользовательский тип записи уже был создан ранее:
<?php
add_post_type_support('my_custom_post_type', 'my_custom_support');
?>
Я знаю, чего хочу, но просто не могу найти, как зарегистрировать новую поддержку…
Я надеюсь, кто-то сможет ответить на эту проблему, потому что я буквально рву на себе волосы!
Ну, вы можете добавить
...
'supports' => array('title','editor', 'thumbnail', 'custom-fields'),
...
Вам не нужно создавать что-либо заранее, вы можете определить два поля “широта” и “долгота” при добавлении новой записи.
Чтобы добавить пользовательскую поддержку для пользовательских типов записей в WordPress, вам нужно использовать функцию add_post_type_support()
.
add_action('init', 'register_custom_post_type_support');
function register_custom_post_type_support() {
add_post_type_support('my_custom_post_type', 'my_custom_support');
}
После добавления поддержки для пользовательской функции, вам нужно определить метабокс, содержащий поля longitude
и latitude
. Вы можете использовать функцию add_meta_box()
для добавления метабокса в экран редактирования вашего пользовательского типа записи.
add_action('add_meta_boxes', 'add_custom_metabox');
function add_custom_metabox() {
add_meta_box(
'custom_geolocation_metabox',
'Geolocation',
'render_custom_geolocation_metabox',
'my_custom_post_type',
'normal',
'default'
);
}
function render_custom_geolocation_metabox($post) {
// Получение значений долготы и широты
$longitude = get_post_meta($post->ID, 'longitude', true);
$latitude = get_post_meta($post->ID, 'latitude', true);
?>
<label for="longitude">Долгота:</label>
<input type="text" id="longitude" name="longitude" value="<?php echo esc_attr($longitude); ?>"><br>
<label for="latitude">Широта:</label>
<input type="text" id="latitude" name="latitude" value="<?php echo esc_attr($latitude); ?>">
<?php
}
add_action('save_post', 'save_custom_geolocation');
function save_custom_geolocation($post_id) {
if (defined('DOING_AUTOSAVE') && DOING_AUTOSAVE) return;
// Сохранение значений долготы и широты
if (isset($_POST['longitude'])) {
update_post_meta($post_id, 'longitude', sanitize_text_field($_POST['longitude']));
}
if (isset($_POST['latitude'])) {
update_post_meta($post_id, 'latitude', sanitize_text_field($_POST['latitude']));
}
}
В приведенном выше коде замените my_custom_post_type
на название вашего пользовательского типа записи, а my_custom_support
на название пользовательской функции поддержки, которую вы хотите добавить.
Ответ или решение
Для добавления пользовательских функций поддержки для типов записей в WordPress, необходимо следовать определенной последовательности действий. Задача заключается в возможности внедрения кастомной панели для ввода геолокационных данных (долготы и широты) для определённого типа записей.
Теория
WordPress предоставляет гибкий механизм для добавления дополнительных метаполей и функциональности через функцию add_post_type_support()
. Однако, создание новых типов поддержки требует более глубокого вмешательства, и обычно достигается через добавление метабоксов с помощью функции add_meta_box()
.
Пример
Вам необходимо сначала прописать поддержку кастомного функционала для вашего типа записей и далее использовать метабоксы для реализации специфических функций. Пример реализации может выглядеть следующим образом:
add_action('init', 'register_custom_post_type_support');
function register_custom_post_type_support() {
add_post_type_support('my_custom_post_type', 'my_custom_support');
}
add_action('add_meta_boxes', 'add_custom_metabox');
function add_custom_metabox() {
add_meta_box(
'custom_geolocation_metabox',
'Геолокация',
'render_custom_geolocation_metabox',
'my_custom_post_type',
'normal',
'default'
);
}
function render_custom_geolocation_metabox($post) {
$longitude = get_post_meta($post->ID, 'longitude', true);
$latitude = get_post_meta($post->ID, 'latitude', true);
?>
<label for="longitude">Долгота:</label>
<input type="text" id="longitude" name="longitude" value="<?php echo esc_attr($longitude); ?>"><br>
<label for="latitude">Широта:</label>
<input type="text" id="latitude" name="latitude" value="<?php echo esc_attr($latitude); ?>">
<?php
}
add_action('save_post', 'save_custom_geolocation');
function save_custom_geolocation($post_id) {
if (defined('DOING_AUTOSAVE') && DOING_AUTOSAVE) return;
if (isset($_POST['longitude'])) {
update_post_meta($post_id, 'longitude', sanitize_text_field($_POST['longitude']));
}
if (isset($_POST['latitude'])) {
update_post_meta($post_id, 'latitude', sanitize_text_field($_POST['latitude']));
}
}
Применение
-
Регистрация поддержки: Сначала добавляется поддержка специфичного функционала через
add_post_type_support()
. В данном случае, это не принципиально, так как настоящий механизм внедрения кастомный. -
Создание метабокса: Метабокс для ввода данных геолокации создается с помощью
add_meta_box()
. Здесь важно отслеживать идентификатор вашего типа записи и метаблока, а также указывать имя функции-обработчика. -
Обработка данных: Необходимо добавить функцию для сохранения введенных пользователем значений. Это гарантирует, что введенные данные сохраняются в метаполях, связанных с записью.
Этот подход обеспечивает гибкость и позволяет управлять дополнительными данными, специфичными для нужного типа записи, на административной панели WordPress.