drake
  • 0
Учитель

Как удалить потерянный пользовательский тип записи?

  • 0

Я создал несколько сообщений, используя пользовательский тип сообщений, затем я решил удалить этот пользовательский тип сообщений, но, конечно, старые сообщения остались бесхозными в базе данных.

Как я могу безопасно удалить эти сообщения-сироты и все связанные с ними вложения (метасообщения и т. д.) из БД?

Share
  1. DELETE a,b,c FROM wp_posts a
    LEFT JOIN wp_term_relationships b ON (a.ID=b.object_id)
    LEFT JOIN wp_postmeta c ON (a.ID=c.post_id)
    WHERE a.post_type='customposttype'
    
    • 0
    • Это неправильно. Если бы a.post_type имел значение, то он не был бы сиротой. У меня есть таблица wp_postmeta, полная сирот, 2000+, а в таблице wp_post есть только 1 сообщение. Метаданные все для cpt, которые уже были удалены, но эти сироты тоже должны уйти.

      • 0
    • Эта вторая строка опасна — она удалит все мета-значения независимо от типа сообщения, что может быть не тем, чего хотел OP. Вам, вероятно, лучше сделать что-то вроде delete from wp_postmeta where post_id in (select id from wp_posts where post_type = '[customposttype]'

      • 0
  2. Вам нужно использовать несколько SQL-запросов, вы можете запустить их в чем-то вроде PHPMyADMIN.

    DELETE FROM wp_posts WHERE `post_type` = 'customposttypename'
    DELETE FROM wp_post_meta WHERE `meta_key` = 'metakeyname'
    

    Вышеупомянутые два помогут вам начать. Возможно, вам потребуется выполнить другие запросы, чтобы очистить другие записи, но только вы будете знать, какие еще данные вы вставили в свою БД.

    Слово предупреждения! УБЕДИТЕСЬ, ЧТО ВЫ СДЕЛАЛИ РЕЗЕРВНУЮ БАЗУ ДАННЫХ. А также перед запуском запроса DELETE сначала используйте SELECT * FROM, чтобы проверить, что возвращено, и что вы хотите удалить.

    • 0

Оставить ответ

You must login to add an answer.