据我所知,内核缺少用于这种批量删除的功能。最安全的做法是循环CPT中的帖子并删除字段。
$del = array(
\'list\',
\'of\',
\'keys\',
\'to\',
\'delete\'
);
$args = array(
\'post_type\' => \'book\',
\'posts_per_page\' => -1,
\'ignore_sticky_posts\' => true,
\'fields\' => \'ids\',
\'no_found_rows\' => true
);
$q = new WP_Query($args);
if (!empty($q->posts)) {
foreach ($q->posts as $pid) {
foreach ($del as $d) {
delete_post_meta($pid,$d);
}
}
}
除非您在该CPT中有大量的帖子,或者服务器负载过重,否则这对于偶尔的清理应该很好。
如果这些字段特定于您的一种帖子类型,并且您不担心丢失可能与其他帖子类型相关的数据,那么您可以对SQL
.
$del = array(
\'list\',
\'of\',
\'keys\',
\'to\',
\'delete\'
);
$sql = "DELETE FROM {$wpdb->postmeta} WHERE meta_key IN (\'".implode("\',\'",$del)."\')";
$wpdb->query($sql);
当然,由于数据库结构可能会发生变化,这在某种程度上不太“经得起未来考验”,尽管在这种情况下我对此表示怀疑。