Удаление Опции в WordPress: Полное Руководство с delete_option()

Удаление Опции в WordPress с Помощью delete_option()

Общее Описание

Функция delete_option() используется для удаления заданной опции по её имени в WordPress. Она предотвращает удаление защищенных опций WordPress.

Назначение Функции

Используется, например, в функции remove_theme_mods().

Хуки Функции

  • delete_option — срабатывает перед удалением опции.
  • delete_option_(option) — срабатывает перед удалением конкретной опции.
  • deleted_option — срабатывает после того, как опция была удалена.

Возврат

Функция возвращает:

  • true — если опция была успешно удалена.
  • false — если удаление не удалось.

Применение

Чтобы удалить опцию, используйте следующий синтаксис:

delete_option( $option );

где $option — это строка, представляющая имя опции, которую вы хотите удалить (не экранируйте её).

Примеры Использования

Пример 1: Основной пример

Удаление опции с названием myoption.

delete_option( 'myoption' );

Пример 2: Удаление нескольких опций сразу

В этом примере мы удалим несколько опций: is_installed, my_plugin_version, my_option.

$deleted = delete_my_options( 'is_installed', 'my_plugin_version', 'my_option' );

if( $deleted ){
    echo 'Настройки удалены!';
}
else {
    echo 'При удалении настроек произошла ошибка. Настройки не были удалены!';
}

function delete_my_options() {
    $args = func_get_args(); // Получаем список переданных аргументов
    $num = count( $args ); // Считаем количество аргументов

    if( $num === 1 ){
        return ( delete_option( $args[0] ) ? true : false );
    }

    if( $num > 1 ){
        foreach( $args as $option ){
            if( ! delete_option( $option ) ){
                return false; // Возвращаем false, если хотя бы одна опция не удалена
            }
        }
        return true; // Все опции удалены успешно
    }

    return false; // Если не переданы опции, возвращаем false
}

Пример 3: Удаление всех настроек

При деактивации плагина вы можете захотеть удалить все свои настройки.

$to_delete = array( 
    'plugin_status', 
    'export_status', 
    'notifications', 
    'label_settings',
    // и т.д.
); 

// Удаляем наши настройки
foreach ( $to_delete as $name ) {
    delete_option( $name );
}

Примечания

  • Глобальная переменная $wpdb используется для работе с базой данных в WordPress.

Изменения

Функция была добавлена в версии 1.2.0.

Исходный Код Функции delete_option

Функция реализована в файле wp-includes/option.php:

function delete_option( $option ) {
    global $wpdb;

    if ( is_scalar( $option ) ) {
        $option = trim( $option );
    }

    if ( empty( $option ) ) {
        return false;
    }

    wp_protect_special_option( $option );

    // Получаем информацию об опции
    $row = $wpdb->get_row( $wpdb->prepare( "SELECT autoload FROM $wpdb->options WHERE option_name = %s", $option ) );
    if ( is_null( $row ) ) {
        return false; // Если опция не найдена
    }

    // Срабатывает перед удалением опции
    do_action( 'delete_option', $option );

    // Удаляем опцию
    $result = $wpdb->delete( $wpdb->options, array( 'option_name' => $option ) );

    if ( ! wp_installing() ) {
        if ( in_array( $row->autoload, wp_autoload_values_to_autoload(), true ) ) {
            $alloptions = wp_load_alloptions( true );

            if ( is_array( $alloptions ) && isset( $alloptions[ $option ] ) ) {
                unset( $alloptions[ $option ] );
                wp_cache_set( 'alloptions', $alloptions, 'options' );
            }
        } else {
            wp_cache_delete( $option, 'options' );
        }

        $notoptions = wp_cache_get( 'notoptions', 'options' );

        if ( ! is_array( $notoptions ) ) {
            $notoptions = array();
        }
        $notoptions[ $option ] = true;

        wp_cache_set( 'notoptions', $notoptions, 'options' );
    }

    if ( $result ) {
        // Срабатывает после удаления опции
        do_action( "delete_option_{$option}", $option );
        do_action( 'deleted_option', $option );

        return true; // Опция успешно удалена
    }

    return false; // Ошибка при удалении
}

Теперь вы знаете, как эффективно использовать функцию delete_option() в WordPress для удаления настроек вашего сайта!

Leave a Reply

Ваш адрес email не будет опубликован. Обязательные поля помечены *