Eliminar meta keys de posts en WordPress
Tengo muchas meta keys de posts que ya no uso y estoy intentando averiguar cómo eliminarlas para que no sigan apareciendo en la lista de campos personalizados del panel de administración.
Este código eliminará los valores de las meta keys de los posts:
function hp_batch_delete_post_meta(){
// Obtener array con todos los IDs de posts
$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'),
) );
// Eliminar meta datos para cada post
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');
Pero me gustaría eliminar completamente las meta keys para que no aparezcan en esa lista de administración.
Agradecería cualquier ayuda.

Esta es una publicación bastante antigua, pero existe una forma mucho mejor de hacer esto.
El núcleo de WordPress tiene una función donde puedes eliminar todos los metadatos por una clave.
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/
Úsala de esta manera:
delete_metadata( 'post', 0, 'meta_key_to_delete', false, true );
Esto se aplicaría a todos los tipos de entradas, estados de publicación, etc. Así que para eliminar las claves de metadatos de ejemplo como arriba:
$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 );
}

Encontré esto a través de una búsqueda en Google (Fuente)
Tienes que cambiar los valores de las claves meta como desees. Sin embargo, es altamente recomendable hacer una copia de seguridad de la base de datos antes de ejecutar este código.
<?php
function eliminar_meta_post_innecesario() {
global $wpdb;
$tabla = $wpdb->prefix.'postmeta';
$wpdb->delete ($tabla, array('meta_key' => '_edit_last'));
$wpdb->delete ($tabla, array('meta_key' => '_edit_lock'));
$wpdb->delete ($tabla, array('meta_key' => '_wp_old_slug')); }
add_action('wp_logout','eliminar_meta_post_innecesario');
?>
