@astaxov81

Не корректно отрабатывает отчистка wp_terms при удаление плагина. Как исправить?

Здравсвуйте.

Не могу понять почему при удаление плагина не срабатывают все запросы к базе.

Плагин создает произвольный тип записи "квартиры" и две таксономии: "количество комнат" и "этажность".
При удаление плагина, хочу удалять все записи и таксономии, что были созданы при его работе. С удалением произвольного типа записи -разобрался, делаю это таким образом:

function remove_type_flats()
    {
        $params = [
            'posts_per_page' => -1,
            'post_type' => 'flats',
            'post_status' => [
                'publish',
                'future',
                'draft',
                'pending',
                'private',
                'trash',
                'auto - draft',
                'inherit',
            ]
        ];
        $query = new WP_Query($params);
        if ($query->have_posts()) :
            while ($query->have_posts()) : $query->the_post();
                wp_delete_post($query->post->ID, true);
            endwhile;
        endif;
    }
    remove_type_flats();

А вот с далением такономий возникли проблемы. Не знаю есть ли альтернатива или нет. Но смог реализовать частичное удаленеи таксономий запросами к базе:
function drop_custom_table()
    {
        global $wpdb;
        $terms = $wpdb->prefix . 'terms';
        $term_taxonomy = $wpdb->prefix . 'term_taxonomy';
        $term_relationships = $wpdb->prefix . 'term_relationships';

        $wpdb->query("DELETE FROM $term_taxonomy WHERE taxonomy='rooms'");  // этот запрос отрабатывает корректно, записи из таблицы "term_taxonomy" - удаляются
        $wpdb->query("DELETE FROM $term_taxonomy WHERE taxonomy='floors'");  // этот запрос отрабатывает корректно, записи из таблицы "term_taxonomy" - удаляются

// Этот пример я взял с wp-kama: "<a href="https://wp-kama.ru/id_978/20-poleznyih-sql-zaprosov-dlya-wordpress.html#ochistka-kesha-fida">Удаление неиспользуемых элементов таксономии из БД одним SQL запросом</a>"
        $wpdb->query("DELETE FROM $terms WHERE term_id IN (SELECT term_id FROM $term_taxonomy WHERE count = 0 )"); // этот запрос не работает, после удаления планинаев, term'ы от удаленных таксономий так и остаются :(

        $wpdb->query("DELETE FROM $term_taxonomy WHERE term_id NOT IN (SELECT term_id FROM $terms"); //не уверен на счет этого запроса, так как первые два удаляют термы по taxonomy=''

        $wpdb->query("DELETE FROM $term_relationships WHERE term_taxonomy_id NOT IN (SELECT term_taxonomy_id FROM $term_taxonomy)"); // этот запрос отрабатывает корректно, записи из "term_relationships" удаляются.

    }
    drop_custom_table();


ПОдскажите, как скорректировать
  • Вопрос задан
  • 98 просмотров
Решения вопроса 1
yaleksandr89
@yaleksandr89
PHP developer
Попробуй такой вариант:
1. Сначала выполнить удаление записей:
*функция удаления записей по post_typy*

2. Первые два запроса к таблице 'term_taxonomy' перемести в самый низ:
...

        $wpdb->query("DELETE FROM $terms WHERE term_id IN (SELECT term_id FROM $term_taxonomy WHERE count = 0 )");
        $wpdb->query("DELETE FROM $term_taxonomy WHERE term_id NOT IN (SELECT term_id FROM $terms");
        $wpdb->query("DELETE FROM $term_relationships WHERE term_taxonomy_id NOT IN (SELECT term_taxonomy_id FROM $term_taxonomy)");

        $wpdb->query("DELETE FROM $term_taxonomy WHERE taxonomy='rooms'");
        $wpdb->query("DELETE FROM $term_taxonomy WHERE taxonomy='floors'");
}


Ну и вызови их, сначала
remove_type_flats(), потом drop_custom_table().

Должно сработать.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы