Description

Pas besoin de sérializer les valeurs. Si elles en ont besoin, elles seront sérializées avant d'être enregistrées dans la base de donnée. RAPPEL : les ressources ne peuvent pas être sérializées ou ajoutées comme une option.

On peut créer des options sans valeurs et les mettre à jour plus tard. Les options existantes seront vérifiées pour être sûr de ne pas ajouter une option protégée.

Paramètres

$option

(string) (Requis) Nom de l'option à ajouter. Pas d'échappements SQL attendus.

$value

(mixed) (Optionnel) Valeur de l'option. Doit être sérializéé si non scalaire. Pas d'échappements SQL attendus.

Valeur par défaut : ''

$deprecated

(string) (Optionnel) Description. Ne plus utiliser.

Valeur par défaut : ''

$autoload

(string | bool) (Optionnel) Pour charger une option quand WordPress commence. Par défaut est réglé comme autorisé. Accepte aussi 'no' pour désactiver pour des raisons d'héritages.

Valeur par défaut : 'yes'

Retourne

(bool) True si l'option a été ajouté, false sinon.

Structure de la fonction add_option()

Définie dans le fichier wp-includes/option.php à la ligne 514 :

function add_option( $option, $value = '', $deprecated = '', $autoload = 'yes' ) {
    global $wpdb;

    if ( ! empty( $deprecated ) ) {
        _deprecated_argument( __FUNCTION__, '2.3.0' );
    }

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

    /*
     * Until a proper _deprecated_option() function can be introduced,
     * redirect requests to deprecated keys to the new, correct ones.
     */
    $deprecated_keys = array(
        'blacklist_keys'    => 'disallowed_keys',
        'comment_whitelist' => 'comment_previously_approved',
    );

    if ( ! wp_installing() && isset( $deprecated_keys[ $option ] ) ) {
        _deprecated_argument(
            __FUNCTION__,
            '5.5.0',
            sprintf(
                /* translators: 1: Deprecated option key, 2: New option key. */
                __( 'The "%1$s" option key has been renamed to "%2$s".' ),
                $option,
                $deprecated_keys[ $option ]
            )
        );
        return add_option( $deprecated_keys[ $option ], $value, $deprecated, $autoload );
    }

    wp_protect_special_option( $option );

    if ( is_object( $value ) ) {
        $value = clone $value;
    }

    $value = sanitize_option( $option, $value );

    // Make sure the option doesn't already exist.
    // We can check the 'notoptions' cache before we ask for a DB query.
    $notoptions = wp_cache_get( 'notoptions', 'options' );

    if ( ! is_array( $notoptions ) || ! isset( $notoptions[ $option ] ) ) {
        /** This filter is documented in wp-includes/option.php */
        if ( apply_filters( "default_option_{$option}", false, $option, false ) !== get_option( $option ) ) {
            return false;
        }
    }

    $serialized_value = maybe_serialize( $value );
    $autoload         = ( 'no' === $autoload || false === $autoload ) ? 'no' : 'yes';

    /**
     * Fires before an option is added.
     *
     * @since 2.9.0
     *
     * @param string $option Name of the option to add.
     * @param mixed  $value  Value of the option.
     */
    do_action( 'add_option', $option, $value );

    $result = $wpdb->query( $wpdb->prepare( "INSERT INTO `$wpdb->options` (`option_name`, `option_value`, `autoload`) VALUES (%s, %s, %s) ON DUPLICATE KEY UPDATE `option_name` = VALUES(`option_name`), `option_value` = VALUES(`option_value`), `autoload` = VALUES(`autoload`)", $option, $serialized_value, $autoload ) );
    if ( ! $result ) {
        return false;
    }

    if ( ! wp_installing() ) {
        if ( 'yes' === $autoload ) {
            $alloptions            = wp_load_alloptions( true );
            $alloptions[ $option ] = $serialized_value;
            wp_cache_set( 'alloptions', $alloptions, 'options' );
        } else {
            wp_cache_set( $option, $serialized_value, 'options' );
        }
    }

    // This option exists now.
    $notoptions = wp_cache_get( 'notoptions', 'options' ); // Yes, again... we need it to be fresh.

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

    /**
     * Fires after a specific option has been added.
     *
     * The dynamic portion of the hook name, `$option`, refers to the option name.
     *
     * @since 2.5.0 As "add_option_{$name}"
     * @since 3.0.0
     *
     * @param string $option Name of the option to add.
     * @param mixed  $value  Value of the option.
     */
    do_action( "add_option_{$option}", $option, $value );

    /**
     * Fires after an option has been added.
     *
     * @since 2.9.0
     *
     * @param string $option Name of the added option.
     * @param mixed  $value  Value of the option.
     */
    do_action( 'added_option', $option, $value );

    return true;
}

Fonctions et Hooks utilisés par add_option()

wp_installing()

Vérifie ou met Wordpress en mode installation.

wp_cache_get()

Retourne les contenus du cache en donnant la clé et le groupe.

wp_cache_set()

Sauvegarde les données dans le cache.

__()

Retourne la traduction d'un texte.

sanitize_option()

Nettoie divers valeurs d'option basées sur la nature de l'option.

_deprecated_argument()

Marque l'argument d'une fonction comme déprécié et informe quand il a été utilisé.

maybe_serialize()

Sérialize une donnée si besoin.

apply_filters()

Appel les fonctions qui ont été attaché à un filtre (hook).

do_action()

Exécute des fonctions attachées à un hook spécifique.

add_option()

Ajoute une nouvelle option.

wp_load_alloptions()

Charge et met en cache toutes les options auto-chargées si disponible ou toutes les options.

add_option

Se lance avant qu'une option soit ajoutée.

add_option_{$option}

Se lance avant qu'une option spécifique soit ajoutée.

added_option

Se lance après qu'une option ait été ajouté.

wp_protect_special_option()

Empêche la suppression des options protégées de WordPress.

get_option()

Retourne une valeur d'option en fonction de son nom.

default_option_{$option}

Filtre la valeur par défaut d'une option.

Où trouver la fonction add_option() dans le CMS Wordpress

Exemple

add_option( 'myhack_extraction_length', '255', '', 'yes' );

Sources

Codex Wordpress : add_option()

Autres fonctions dans le même fichier : wp-includes/option.php

Retour