admin管理员组文章数量:1393073
I've got a lot of post meta keys that I no longer use, and I'm trying to work out how to delete them so they no longer show in the custom fields list in the admin panel.
This code will delete the post meta values:
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');
But I would like to completely remove the meta keys too so they don't show in that admin list.
Any help appreciated.
I've got a lot of post meta keys that I no longer use, and I'm trying to work out how to delete them so they no longer show in the custom fields list in the admin panel.
This code will delete the post meta values:
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');
But I would like to completely remove the meta keys too so they don't show in that admin list.
Any help appreciated.
Share Improve this question edited Nov 18, 2016 at 20:14 Andy asked Nov 18, 2016 at 20:06 AndyAndy 551 gold badge2 silver badges8 bronze badges 1 |3 Answers
Reset to default 4I found this from just a Google search (Source)
You have to change met value keys as you want. However, it is highly recommend to take a DB backup before running this code.
<?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');
?>
This is quite an old post, but there is a much better way to do this.
WordPress core has a function where you can delete all meta data by a key.
delete_metadata( string $meta_type, int $object_id, string $meta_key, mixed $meta_value = '', bool $delete_all = false );
https://developer.wordpress/reference/functions/delete_metadata/
Use it this way:
delete_metadata( 'post', 0, 'meta_key_to_delete', false, true );
This would apply to all post types, published status, etc. So to delete the examples meta keys as above:
$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 );
}
If you want to delete keys with a wildcard criteria of some sort (as I did) then you can do this directly in SQL.
DELETE FROM `wp_postmeta` WHERE `meta_key` LIKE 'weather_%'
本文标签: Remove post meta keys
版权声明:本文标题:Remove post meta keys 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.betaflare.com/web/1744585534a2614173.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
SELECT * FROM {$wpdb->postmeta} as pm LEFT JOIN {$wpdb->posts} as p ON pm.post_id = p.ID WHERE p.ID IS NULL
– czerspalace Commented Nov 18, 2016 at 21:06