Duplicar (o más) campos personalizados en muchos puestos. ¿Hay una manera fácil de limpiarlas?
-
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.
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]);
}
}
}
?>