WordPress add_option() function kodu

WordPress add_option() function kodu

Değerleri serileştirmeniz gerekmez. Değerin serileştirilmesi gerekiyorsa, veritabanına eklenmeden önce serileştirilir. Unutmayın, kaynaklar seri hale getirilemez veya bir seçenek olarak eklenemez.

Değersiz seçenekler oluşturabilir ve daha sonra değerleri güncelleyebilirsiniz. Mevcut seçenekler güncellenmeyecek ve korumalı bir WordPress seçeneği eklemediğinizden emin olmak için kontroller gerçekleştirilecektir. Seçeneklerin korunanlarla aynı şekilde adlandırılmamasına özen gösterilmelidir.

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;
    }
 
    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();
            $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;
}

Yorumlar / Düşünceler