В этом уроке покажу вам довольно удобный SQL-запрос, которые позволит удалить все, абсолютно все мета-записи c указанным значением meta_key
из таблиц с мета-данными, аля:
wp_postmeta
, wp_termmeta
, wp_sitemeta
, wp_usermeta
, wp_commentmeta
, ну и так далее (хотя на сегодняшний день вроде больше нет других таблиц в WordPress).
Предположим, вы использовали плагин, который при редактировании каждого поста добавлял в него какие-то мета-данные, а при удалении не стал их автоматически удалять. Либо вы сами разрабатываете свой плагин и хотите в uninstall.php прописать автоматическое удаление всего, что плагин насоздавал.
Так вот, подобное удаление выполняется SQL-запросом:
DELETE FROM `wp_postmeta` WHERE meta_key = 'not_true_meta_key'
Ясно дело, что надо не забывать менять префикс wp_
на тот, который используете в своей базе данных, ну да и вполне возможно, что вы выполняете этот запрос не для постов, а ну для пользователей например, тогда меняем название таблицы:
DELETE FROM `wp_usermeta` WHERE meta_key = 'not_true_meta_key'
Для того, чтобы запускать SQL запросы непосредственно из PHP (помните, я же говорил про файл uninstall.php
буквально только что), то тогда активно пользуемся объектом $wpdb.
global $wpdb; $wpdb->query( "DELETE FROM `wp_usermeta` WHERE meta_key = 'not_true_meta_key'" );
Более интересный пример – делаем то же самое, но для определённого типа поста:
DELETE `wp_postmeta` FROM `wp_postmeta` INNER JOIN `wp_posts` ON `wp_posts`.ID = `wp_postmeta`.post_id WHERE `wp_postmeta`.meta_key = 'footnotes' AND `wp_posts`.post_type = 'revision'
Ещё интереснее – когда мы знаем только часть ключа, например если он начинается с not_true_, а дальше неизвестно:
DELETE `wp_postmeta` FROM `wp_postmeta` INNER JOIN `wp_posts` ON `wp_posts`.ID = `wp_postmeta`.post_id WHERE `wp_postmeta`.meta_key LIKE 'foot%' AND `wp_posts`.post_type = 'revision'
Чтобы оставить комментарий, пожалуйста, зарегистрируйтесь или войдите.