Eliminar meta keys de posts en WordPress

18 nov 2016, 22:06:38
Vistas: 16.4K
Votos: 4

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.

Panel de administración mostrando meta keys no deseadas

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.

1
Comentarios

Esas claves meta podrían seguir existiendo en la base de datos. Podrías intentar ejecutar la siguiente consulta y ver si hay claves meta huérfanas 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
Todas las respuestas a la pregunta 3
1

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

¡No puedo creer que esta respuesta no esté recibiendo más votos positivos!

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

Si deseas eliminar claves con un criterio de comodín de algún tipo (como yo hice), puedes hacerlo directamente en SQL.

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

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