Rimuovere chiavi meta dei post

18 nov 2016, 22:06:38
Visualizzazioni: 16.4K
Voti: 4

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.

Elenco 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.

1
Commenti

Quelle meta chiavi potrebbero ancora esistere nel database. Potresti provare a eseguire la seguente query e verificare se ci sono meta chiavi 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
Tutte le risposte alla domanda 3
1

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

Non riesco a credere che questa risposta non stia ricevendo più voti positivi!

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

Se vuoi eliminare chiavi con un criterio generico (come ho fatto io) puoi farlo direttamente in SQL.

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

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