web-dev-qa-db-fra.com

Ajouter une option si non existant

J'ai besoin de voir si une option, et si c'est le cas, obtenir la valeur. Sinon, je dois l'ajouter.

Le Codex fournit:

<?php
$option_name = 'myhack_extraction_length' ;
$new_value = '255' ;
if ( get_option( $option_name ) != $new_value ) {
update_option( $option_name, $new_value );
} else {
$deprecated = ' ';
$autoload = 'no';
add_option( $option_name, $new_value, $deprecated, $autoload );
}
?>

Qui est supposé met à jour le nom de l’option myhack_extraction_length avec la valeur 255. Si l’option n’existe pas, utilisez add_option et définissez autoload sur no.

Cependant, il me semble que la seconde moitié pourrait être appelée de deux manières, si l'option n'existe pas OR si la nouvelle valeur == l'option

Est-ce correct?

2
Chris

La logique du IF THEN ELSE semble un peu bizarre. Si je le lis correctement ...

L'appel à get_option ($ nom_option) renvoie FALSE si l'option n'existe pas ou si elle n'a aucune valeur.

Donc, leSIserait exécuté:

  1. quand l'option n'existe pas et $ new_value! = FALSE
  2. l'option n'a pas de valeur et $ new_value! = FALSE
  3. l'option existe et a une valeur qui est! = $ nouvelle valeur

L'appel update_option () mettrait alors à jour la valeur ou créerait l'option avec $ new_value.

LeSINONserait appelé si:

  1. l'option existe et a la même valeur que $ new_value
  2. l'option n'existe pas et le $ new_value == FALSE
0
Steve

C’est plus simple: vérifiez si l’option n’existe pas (idem si faux/vide). c'est à dire.:

if(!get_option('speccc_nameee')){
    update_option('speccc_nameee', 'first_default_value');
}
5
T.Todua

Est-ce correct?

Si vous voulez dire "quand le 'if' est-il exécuté et quand le 'else' est-il exécuté, alors" Non ". Regardez la condition: if ( get_option( $option_name ) != $new_value ) {

Si l'option n'existe pas - false != '255' est true--, la première partie est exécutée. Il s'exécute également si l'option existe et si les valeurs ne correspondent pas --'123' != '255' est true.

La else ne s'exécute que si les valeurs do match-- '255' != '255' sont fausses, la partie else est donc exécutée. Ils peuvent correspondre à n'importe quoi, des nombres, des chaînes, des booléens - aka vrai ou faux

1
s_ha_dum

Je pense que la meilleure approche à ce problème consiste à créer une logique IF-ELSE comme celle-ci:

   if(get_option('some_option')){
         update_option('some_option', 'value_we_want_to_add');
    }
    else {
      add_option('some_option', 'value_we_want_to_add');
    }

Logique: get_option () retournera TRUE si cette option existe. Dans ce cas, nous pouvons simplement mettre à jour cette option avec une valeur que nous voulons ajouter. Ceci est fait par update_option('some_option','value_we_want_to_add'). D'autre part, si some_option n'existe pas, get_option retournera FALSE et activera le bloc ELSE. À l'intérieur d'un autre bloc, nous avons donné des instructions pour créer ce "some_option" et lui attribuer la valeur que nous voulons.

Cette logique peut éventuellement être modifiée pour répondre à des exigences plus avancées.

1
Technogeek