web-dev-qa-db-ja.com

存在しない場合はオプションを追加

私はオプションがあるかどうかを確認する必要があり、もしそうなら、値を取得します。そうでなければ、私はそれを追加する必要があります。

コーデックス は提供します:

<?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 );
}
?>

オプション名myhack_extraction_lengthを値255に更新します。オプションが存在しない場合は、add_optionを使用してautoloadをnoに設定します。

ただし、オプションが存在しない場合、後半が2つの方法で呼び出される可能性があります。[OR新しい値が==オプションの場合

これは正しいです?

2
Chris

IF THEN ELSEの論理は少し不思議に思えます。正しく読んでいれば….

Get_option($ option_name)を呼び出すと、オプションが存在しない場合、または値がない場合はFALSEが返されます。

そのため、 _ if _ が実行されます。

  1. オプションが存在せず、$ new_value!= FALSEの場合
  2. オプションに値がなく、$ new_value!= FALSE
  3. オプションが存在し、その値が!= $ new valueである

その後、update_option()呼び出しで値を更新するか、$ new_valueを使用してオプションを作成します。

_ else _ は次の場合に呼び出されます。

  1. オプションが存在し、$ new_valueと同じ値を持つ
  2. オプションが存在せず、$ new_value == FALSE
0
Steve

これはオプションが存在しないかどうかをより簡単にチェックします(false/emptyの場合も同じ)。すなわち:

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

これは正しいです?

「いつifを実行し、いつelseを実行するか」という意味であれば、「いいえ」という条件を見てください。if ( get_option( $option_name ) != $new_value ) {

オプションが存在しない場合、false != '255'trueである場合、最初の部分が実行されます。オプションが存在し、値が--'123' != '255'と一致しない場合にも実行されますtrue

elseは、値 do match - '255' != '255'がfalseの場合にのみ実行されるため、else部分が実行されます。それらは何でも、数字、文字列、ブール値で一致する可能性があります - 別名trueまたはfalse

1
s_ha_dum

私はこの問題への最善のアプローチはこのようなIF-ELSEロジックを作成することであると思います:

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

ロジック: get_option()はそのオプションが存在する場合にTRUEを返します。この場合、追加したい値でそのオプションを簡単に更新できます。これはupdate_option('some_option','value_we_want_to_add')によって行われます。一方、some_optionが存在しない場合、get_optionはFALSEを返し、ELSEブロックを有効にします。 elseブロックの中で、この「some_option」を作成して欲しい値を割り当てるように指示しました。

必要に応じて、このロジックはより高度な要件に合わせて変更できます。

1
Technogeek

私はこの種のオプション管理に少し苦労し、別のアプローチでそれをしました...

// create or update the token in DB

    switch ( get_option( 'ngitc_token' ) ) {
        case false: 
            echo "<p>Added token to DB</p>";
            delete_option( 'ngitc_token' ); //get_option() will send false if option doesn't exist OR if it's empty. So I take no chances, I delete it before adding it.
            add_option( 'ngitc_token', $token->token );
            break;
        case $token->token:
            echo "<p>No change to DB</p>";
            break; 
        case true:
            echo "<p>Updated token to DB</p>";
            update_option( 'ngitc_token', $token->token );  
            break;   

    }

@Steveはあなたに完璧に答えています、私はオプション管理にアプローチする方法についての可能性を追加しています。

0
PeeR