2

私は既存のワードプレスのウェブサイトに取り組んでいます。ユーザーには「user-country」というフィールドがあります(実際、このフィールドがワードプレスでどのように作成されるかはわかりませんが、機能します)。登録フォームで、ユーザーは特定の国を 1 つ選択できます。ただし、現在、この国リストは「どこでも」定義されていません。コードで明示的に作成されます。

<option value="Afghanistan" <?php if($current_user->user_country == 'Afghanistan') echo 'selected';?>>Afghanistan</option>
            <option value="Albania" <?php if($current_user->user_country == 'Albania') echo 'selected';?>>Albania</option>
            <option value="Algeria" <?php if($current_user->user_country == 'Algeria') echo 'selected';?>>Algeria</option>
            <option value="American Samoa" <?php if($current_user->user_country == 'American Samoa') echo 'selected';?>>American Samoa</opt

クライアントはこのリストを (国から都市に) 変更したいと考えています。だから私は他の値を追加する必要があります。コードにすべての値を記述したくありません。wp-admin でこれらの値を含むリストを作成したいと思います。

定義済みの値リストを作成する最良の方法は何ですか? これらは投稿用のカスタム フィールドではありません。

編集: DB に値を保存したいので、管理者は wp-admin からこれらの値を変更できます。実際、それが DB であるか、XML のような他のオプションであるかはそれほど重要ではありません。ユーザーが登録しているときにこのリストをドロップダウンとして表示し、このリストの値を変更するために wp-admin にも表示したいだけです。

また、質問が頭に浮かびます-国や都市などのユーザーカスタムフィールドをDBに保存するのは通常の習慣ですか? それとも、コードで明示的に定義しても問題ないでしょうか?

4

1 に答える 1

3

管理者がリストを変更できるようにしたい場合は、おそらく DB が最適なオプションです。

私はこのようなことをします(WordPressで):

// put a default (initial) list in the database, if there isn't one there yet
if(!get_option('my_country_list')){

  // store it as a |-delimited string, because WP serializes arrays,
  // and this would be too much here
  $data = 'Albania|Algeria|Disneyland|etc';

  update_option('my_country_list', $data);
}

後でそのリストが必要な場合は、データベースから取得します。

$countries = get_option('my_country_list');

// turn it into an array
$countries = implode('|', $countries);

// generate the select field
$html = '';
foreach($countries as $country){

  $checked = '';

  if($current_user->user_country == $country)
    $checked = 'selected="selected"';

  $html .= sprintf('<option value="%1$s" %2$s> %1$s </option>', $country, $checked);
}

printf('<select> %s </select>', $html);

管理者がこのリストからエントリを変更できる、オプション用の何らかの管理フォームもあると思います。これはテキストエリアである可能性があります。再度送信されたらupdate_option()(新しい行を に置き換えます|)

于 2013-01-24T14:44:58.783 に答える