Rimuovere chiavi meta dei post
Ho molte chiavi meta dei post che non uso più e sto cercando di capire come eliminarle in modo che non compaiano più nell'elenco dei campi personalizzati nel pannello di amministrazione.
Questo codice eliminerà i valori meta dei post:
function hp_batch_delete_post_meta(){
// ottieni un array di tutti gli ID dei post
$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'),
) );
// rimuovi i meta post per ogni 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');
Ma vorrei rimuovere completamente anche le chiavi meta in modo che non compaiano più in quell'elenco di amministrazione.
Qualsiasi aiuto è apprezzato.

Questo è un post piuttosto vecchio, ma c'è un modo molto migliore per farlo.
Il core di WordPress ha una funzione che permette di eliminare tutti i metadati tramite una chiave.
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/
Usala in questo modo:
delete_metadata( 'post', 0, 'meta_key_to_delete', false, true );
Questo si applicherà a tutti i tipi di post, stato di pubblicazione, ecc. Quindi per eliminare le chiavi meta degli esempi sopra:
$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 );
}

Ho trovato questo da una semplice ricerca su Google (Fonte)
Devi modificare i valori delle meta chiavi come preferisci. Tuttavia, è altamente consigliato fare un backup del database prima di eseguire questo codice.
<?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');
?>
