Вопрос или проблема
Я создал метабокс для пользовательского типа записи. В административном редактировании поста я хочу ввести несколько значений, чтобы они сохранялись в виде массива, чтобы затем я мог обращаться к ним как к массиву с фронтенда.
Таким образом, в моем метабоксе в административном редактировании я сохраню значения “200”, “201”, “202” в одном поле “_parent_id”, а затем получу их с фронтенда.
$array = get_post_meta($postID, "_parent_id", false);
Как должны выглядеть эти значения в поле метабокса?
Просто сохраните массив в метаданных поста так же, как вы сохраняете строку.
$data = array("200", "201", "202");
//Update вставляет новую запись, если она не существует, обновляет в противном случае
update_post_meta($post_ID, '_parent_id', $data);
Чтобы получить пост, вызовите get_post_meta
следующим образом:
get_post_meta($post_ID, '_parent_id', true);
Вы получите массив. Затем выполните цикл for
или foreach
, чтобы отобразить данные массива так, как вам нужно.
Ответ или решение
Чтобы сохранить массив значений в мета-боксе для пользовательского типа записи в WordPress, вы можете использовать стандартные функции, такие как update_post_meta
и get_post_meta
. Давайте рассмотрим шаги, необходимые для реализации этой задачи.
Шаг 1: Создание мета-бокса в админке
Сначала вам нужно создать мета-бокс, где пользователи смогут вводить значения. Обычно это делается с использованием функции add_meta_box
.
Пример кода для создания мета-бокса:
function my_custom_meta_box() {
add_meta_box(
'my_meta_box_id', // ID
'Мой мета-бокс', // Заголовок
'my_meta_box_callback', // Функция обратного вызова
'my_custom_post_type' // Тип записи
);
}
add_action('add_meta_boxes', 'my_custom_meta_box');
function my_meta_box_callback($post) {
$values = get_post_meta($post->ID, '_parent_id', true);
$values = is_array($values) ? implode(", ", $values) : '';
?>
<label for="parent_ids">Введите ID (через запятую): </label>
<input type="text" name="parent_ids" id="parent_ids" value="<?php echo esc_attr($values); ?>" />
<?php
}
Шаг 2: Сохранение массива значений
Когда пользователь сохраняет запись, вы должны обработать и сохранить введенные значения как массив. Это можно сделать с помощью хука save_post
.
function save_my_custom_meta_box($post_id) {
// Проверка прав доступа
if (!current_user_can('edit_post', $post_id)) {
return;
}
// Проверка существования данных
if (isset($_POST['parent_ids'])) {
// Преобразуем вводимые данные в массив
$parent_ids = array_map('trim', explode(',', sanitize_text_field($_POST['parent_ids'])));
// Обновляем мета-данные
update_post_meta($post_id, '_parent_id', $parent_ids);
}
}
add_action('save_post', 'save_my_custom_meta_box');
Шаг 3: Получение массива значений на фронтенде
Чтобы получить массив значений на фронтенде, используйте следующую функцию:
$array = get_post_meta($post->ID, '_parent_id', true);
if (!empty($array) && is_array($array)) {
foreach ($array as $value) {
echo esc_html($value) . '<br>'; // Вывод значений
}
}
Заключение
Теперь вы знаете, как создать мета-бокс для пользовательского типа записи, сохранить введенные значения как массив, и затем получить этот массив на фронтенде. Пользователи могут вводить значения ID через запятую, которые затем будут сохранены правильно как массив в мета-данных записи. Вы можете адаптировать и улучшать код в зависимости от ваших конкретных требований.