Удаление мета-ключей записей
У меня есть множество мета-ключей записей, которые больше не используются, и я пытаюсь понять, как их удалить, чтобы они не отображались в списке произвольных полей в админ-панели.
Этот код удаляет значения мета-полей записей:
function hp_batch_delete_post_meta(){
// Получаем массив всех ID записей
$post_ids = get_posts( array(
'numberposts' => -1,
'fields' => 'ids',
'post_type' => array('ad_upload','post', 'page'),
'post_status' => array('publish', 'auto-draft', 'trash', 'pending', 'draft'),
) );
// Удаляем мета-данные для каждой записи
foreach( $post_ids as $post_id ) {
delete_post_meta($post_id, 'my_postmeta_key_1');
delete_post_meta($post_id, 'my_postmeta_key_2');
delete_post_meta($post_id, 'my_postmeta_key_3');
}
}
add_action('init', 'hp_batch_delete_post_meta');
Но я хотел бы полностью удалить мета-ключи, чтобы они не отображались в этом административном списке.
Буду благодарен за любую помощь.

Это довольно старая запись, но есть гораздо лучший способ сделать это.
В ядре WordPress есть функция, которая позволяет удалять все метаданные по ключу.
delete_metadata( string $meta_type, int $object_id, string $meta_key, mixed $meta_value = '', bool $delete_all = false );
https://developer.wordpress.org/reference/functions/delete_metadata/
Используйте её следующим образом:
delete_metadata( 'post', 0, 'meta_key_to_delete', false, true );
Это будет применено ко всем типам записей, статусам публикации и т.д. Таким образом, чтобы удалить примеры мета-ключей, как указано выше:
$deletable = array( 'my_postmeta_key_1', 'my_postmeta_key_2', 'my_postmeta_key_3' );
foreach( $deleteable as $to_delete ) {
delete_metadata( 'post', 0, $to_delete, false, true );
}

Я нашел это в результате обычного поиска в Google (Источник)
Вам необходимо изменить ключи мета-значений по своему усмотрению. Однако настоятельно рекомендуется сделать резервную копию базы данных перед запуском этого кода.
<?php
function delete_useless_post_meta() {
global $wpdb;
$table = $wpdb->prefix.'postmeta';
$wpdb->delete ($table, array('meta_key' => '_edit_last'));
$wpdb->delete ($table, array('meta_key' => '_edit_lock'));
$wpdb->delete ($table, array('meta_key' => '_wp_old_slug')); }
add_action('wp_logout','delete_useless_post_meta');
?>
