wpwebsite.ru wordpress WPWebSite

Как удалить произвольное поле (custom field) в WordPress

Произвольные поля (custom fields) — это удобный способ добавить дополнительную информацию к записям, страницам и другим типам контента в WordPress. Однако со временем в базе данных может накопиться много устаревших или ненужных произвольных полей, которые стоит удалить для оптимизации сайта. В этой статье мы подробно разберём, как удалить произвольное поле в WordPress разными способами — вручную через код, с помощью запросов к базе данных и через плагины.

Что такое произвольные поля и зачем их удалять

Произвольные поля — это метаданные, которые хранятся в таблице wp_postmeta и связаны с записями, страницами и другими объектами WordPress. Они содержат дополнительную информацию, например, цену товара, дату события, идентификатор видео и многое другое.

Удалять произвольные поля нужно в случаях, когда:

  • Поля больше не используются и занимают место в базе данных.
  • Происходит очистка данных после удаления функционала или плагина.
  • Необходимо исправить ошибочные или дублирующиеся метаданные.

Правильное удаление улучшит производительность сайта и упростит работу с базой данных.

Удаление произвольного поля вручную с помощью PHP-кода

WordPress предоставляет функцию delete_post_meta, которая позволяет удалять произвольные поля для конкретной записи.

Пример функции с префиксом wpwebsite_ для удаления поля по ключу:

function wpwebsite_delete_custom_field($post_id, $meta_key) {
    if (delete_post_meta($post_id, $meta_key)) {
        return true; // Удаление прошло успешно
    } else {
        return false; // Поле отсутствует или ошибка
    }
}

Использование:

$result = wpwebsite_delete_custom_field(123, 'my_custom_field');
if ($result) {
    echo 'Поле успешно удалено';
} else {
    echo 'Поле не найдено или не удалось удалить';
}

Такой способ подходит, если нужно удалить поле у конкретной записи. Если записей много, можно использовать цикл.

Удаление произвольного поля у всех записей с определённым ключом

Иногда нужно удалить конкретное поле у всех записей. Для этого можно использовать WP_Query и функцию delete_post_meta в цикле:

function wpwebsite_delete_custom_field_everywhere($meta_key) {
    $args = [
        'post_type' => 'any',
        'meta_key' => $meta_key,
        'posts_per_page' => -1
    ];
    $query = new WP_Query($args);
    if ($query->have_posts()) {
        while ($query->have_posts()) {
            $query->the_post();
            delete_post_meta(get_the_ID(), $meta_key);
        }
        wp_reset_postdata();
    }
}

Этот код удалит поле $meta_key у всех записей, где оно присутствует.

Удаление произвольных полей напрямую из базы данных

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

Пример запроса для удаления метаданных с определённым ключом:

DELETE FROM wp_postmeta WHERE meta_key = 'my_custom_field';

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

Если таблица имеет другой префикс, замените wp_ на свой.

Удаление лишних пустых или неиспользуемых полей

Иногда в базе появляются записи с пустыми значениями, которые тоже стоит удалить:

DELETE FROM wp_postmeta WHERE meta_key = 'my_custom_field' AND meta_value = '';

Это поможет убрать мусор и улучшить производительность.

Использование плагинов для удаления произвольных полей

Если вы не хотите работать с кодом или SQL, воспользуйтесь специализированными плагинами. Вот несколько популярных решений:

  • Advanced Database Cleaner — позволяет найти и удалить неиспользуемые метаданные, оптимизировать базу.
  • WP Sweep — удаляет мусорные данные, включая неиспользуемые произвольные поля.
  • Meta Box — если вы используете этот плагин для создания произвольных полей, в его интерфейсе можно удалить ненужные поля и данные.

Пример ссылки на Advanced Database Cleaner на WPSHOP.

Как избежать случайного удаления нужных данных

Важно с осторожностью подходить к удалению произвольных полей, чтобы не повредить работу сайта. Рекомендации:

  • Перед удалением сделайте резервную копию базы данных.
  • Проверьте, какие плагины и темы используют эти поля.
  • Удаляйте поля по ключу, чтобы не затронуть другие данные.
  • Для массовых удалений сначала протестируйте на тестовом сайте.

Пример комплексного кода для удаления поля по ключу с логированием

Ниже пример функции с логированием результата удаления:

function wpwebsite_delete_custom_field_with_log($post_id, $meta_key) {
    if (delete_post_meta($post_id, $meta_key)) {
        error_log("[wpwebsite] Произвольное поле '$meta_key' удалено из записи $post_id");
        return true;
    } else {
        error_log("[wpwebsite] Не удалось удалить поле '$meta_key' из записи $post_id или поле отсутствует");
        return false;
    }
}

Такой подход поможет отследить, что и где было удалено при массовом обслуживании сайта.

×
Сделай свой сайт крутым!

Скидка -20% на премиум плагины WordPress

Выбрать плагин сейчас ⋙