Cum să elimini cheile meta ale postărilor
Am o mulțime de chei meta pentru postări pe care nu le mai folosesc și încerc să aflu cum să le șterg, astfel încât să nu mai apară în lista de câmpuri personalizate din panoul de administrare.
Acest cod va șterge valorile meta ale postărilor:
function hp_batch_delete_post_meta(){
// obține un array cu toate ID-urile de postări
$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'),
) );
// elimină metadatele pentru fiecare postare
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');
Dar aș dori să elimin complet și cheile meta, astfel încât să nu mai apară în acea listă din administrare.
Orice ajutor este binevenit.

Acesta este un post destul de vechi, dar există o metodă mult mai bună de a face acest lucru.
WordPress are o funcție integrată prin care poți șterge toate metadatele după o cheie.
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/
Folosește-o în felul următor:
delete_metadata( 'post', 0, 'meta_key_to_delete', false, true );
Aceasta se va aplica tuturor tipurilor de postări, indiferent de statusul lor. Deci pentru a șterge cheile de metadate din exemplele de mai sus:
$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 );
}

Am găsit asta dintr-o simplă căutare pe Google (Sursă)
Trebuie să schimbați cheile meta după cum doriți. Cu toate acestea, este foarte recomandat să faceți o copie de rezervă a bazei de date înainte de a rula acest cod.
<?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');
?>
