Cum să elimini cheile meta ale postărilor

18 nov. 2016, 22:06:38
Vizualizări: 16.4K
Voturi: 4

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.

Lista de câmpuri personalizate în WordPress

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.

1
Comentarii

Acele chei meta ar putea încă exista în baza de date. Poți încerca să rulezi următoarea interogare pentru a verifica dacă există chei meta orfane SELECT * FROM {$wpdb->postmeta} as pm LEFT JOIN {$wpdb->posts} as p ON pm.post_id = p.ID WHERE p.ID IS NULL

czerspalace czerspalace
18 nov. 2016 23:06:06
Toate răspunsurile la întrebare 3
1

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 );
}
8 apr. 2020 21:42:12
Comentarii

Nu pot să cred că acest răspuns nu primește mai multe voturi pozitive!

Daan van den Bergh Daan van den Bergh
27 mai 2021 16:41:37
0

Dacă dorești să ștergi chei folosind un criteriu cu wildcard (așa cum am făcut eu), poți face acest lucru direct în SQL.

DELETE FROM `wp_postmeta` WHERE `meta_key` LIKE 'weather_%'
1 nov. 2017 19:38:28
0

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');
?>
19 nov. 2016 04:00:21