Remove post meta keys

时间:2016-11-18 作者:Andy

我有很多不再使用的post meta键,我正在努力解决如何删除它们,使它们不再显示在管理面板的自定义字段列表中。

enter image description here

此代码将删除post元数据:

function hp_batch_delete_post_meta(){

    // get array of all post ids
    $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\'),
    ) );

    // remove post meta for each 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\');
但是我也希望完全删除元密钥,这样它们就不会显示在管理列表中。

感谢您的帮助。

3 个回复
最合适的回答,由SO网友:Ranuka 整理而成

我在谷歌搜索中找到了这个(Source)

您必须根据需要更改met值键。但是,强烈建议采取DB backup 在运行此代码之前。

<?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\');
?>

SO网友:Chris Rae

如果要删除具有某种通配符条件的键(如我所做的),那么可以直接在SQL中执行此操作。

DELETE FROM `wp_postmeta` WHERE `meta_key` LIKE \'weather_%\'

SO网友:jeremyescott

这是一篇很老的帖子,但有一种更好的方法可以做到这一点。

WordPress core有一个功能,您可以通过一个键删除所有元数据。

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/

使用方法如下:

delete_metadata( \'post\', 0, \'meta_key_to_delete\', false, true );
这将适用于所有帖子类型、发布状态等,因此要删除上述示例元键:

$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 );
}

相关推荐

列出分类法:如果分类法没有POST,就不要列出分类法--取决于定制的POST-META?

这可能很难解释,我不知道是否有解决办法!?我有一个名为“wr\\u event”的自定义帖子类型和一个名为“event\\u type”的分层自定义分类法。自定义帖子类型有一个元框,用于event_date 并且与此帖子类型关联的所有帖子都按以下方式排序event_date. 我在循环中有一个特殊的条件来查询event_date 已经发生了-在这种情况下,它没有显示,但只列在我的档案中。就像你可以使用wp_list_categories() 我编写了一个自定义函数,它以完全相同的方式列出所有分类术语。现在