Duplicar (o más) campos personalizados en muchos puestos. ¿Hay una manera fácil de limpiarlas?

wordpress.stackexchange https://wordpress.stackexchange.com/questions/2866

  •  16-10-2019
  •  | 
  •  

Pregunta

Estoy en el proceso de limpieza de un sitio después de migrar desde una única instalación de WP a una multi-sitio de la instalación de WP. Me he dado cuenta de muchos, muchos campos personalizados por duplicado para cada puesto. Asumo que esto es desde versiones anteriores de los plugins que no verificación del campo antes de agregar otro. En la migración estoy Dejar caer estos plugins.

Podría acabo de borrar estos campos en el back-end utilizando SQL o hay una mejor manera?

SELECT * 
FROM  `wp_5_postmeta` 
WHERE  `meta_key` IN ("podPressPostSpecific", "aktt_tweeted", "podPressMedia")

Sólo usando DELETE obviamente.

¿Fue útil?

Solución

Si no va a utilizar esos plugins, tienen en él. No hay razón para mantenerlos alrededor. consulta SQL directa debe estar bien.

relacionadas: add_post_meta() tiene un argumento ingenioso para evitar que este mismo problema. El cuarto argumento es un valor lógico, declarando si la meta debe ser singular:

add_post_meta( $post->ID, 'my_foo_bar', 'value', true );

Fuente: Añadir Publica Meta | WP Codex

Otros consejos

Si desea eliminar todos los campos, hacerlo directamente en la base de datos, o en el área de administración. Pero si desea guardar una copia de cada campo, y sólo eliminar los duplicados, bueno, es un poco más complicado. Puede eliminar directamente de la base de datos, utilizando una sentencia SQL intrincada como:

delete from wp_postmeta
where meta_id in (
       select *
       from (
               select meta_id
               from wp_postmeta a
               where a.meta_key = 'podPressPostSpecific'
               and meta_id not in (
                       select min(meta_id)
                       from wp_postmeta b
                       where b.post_id = a.post_id
                       and b.meta_key = 'podPressPostSpecific'
               )
       ) as x
);

No se olvide de cambiar nombre de la meta_key en ambos lugares si quieres duplicados de borrado para otro campo personalizado.

o puede utilizar un script php para esto. Ejemplo:

<?php
    define('WP_USE_THEMES', false);
    require('wp-blog-header.php');

    define( 'WP_DEBUG_DISPLAY', true ); 
    ini_set( 'display_errors', true );
    $allposts = get_posts('numberposts=-1&post_type=post&post_status=any');
    $keys = array('podPressPostSpecific', 'aktt_tweeted', 'podPressMedia');
    foreach ( $keys as $key ) {
        foreach( $allposts as $postinfo) {
            // Fetch array of custom field values
            $postmeta = get_post_meta($postinfo->ID, $key);

            if (!empty($postmeta) ) {
                // Delete the custom field for this post (all occurrences)
                delete_post_meta($postinfo->ID, $key);

                // Insert one and only one custom field
                update_post_meta($postinfo->ID, $key, $postmeta[0]);
            }
        }
    }
?>
Licenciado bajo: CC-BY-SA con atribución
scroll top