Qual é a diferença entre Opções e configurações?

14

E qual devo usar?

Qual é a diferença entre a API de opções e a API de configurações ?

Eu tenho um tema com mais de 100 opções de administrador. Como devo registrá-las e armazená-las? No momento, estou usando a API de opções, mas não estou muito feliz com isso, todas as opções estão sendo registradas separadamente, para que elas criem muitas consultas ao banco de dados.

Vejo três maneiras de armazenar opções / configurações do WordPress no momento:

1. API de opções - a maneira antiga (a pior?).

(Eu já estou usando este)

<form method="post" action="options.php">
<?php wp_nonce_field('update-options'); ?>        

// all the inputs

<input type="hidden" name="action" value="update" />
<input type="hidden" name="page_options" value="option1,option2,option3,..." />
<p class="submit">
<input type="submit" value="<?php _e('Save Changes') ?>" />
</p>
</form>

E então no front end:

echo get_option('option1'); 

Parece feio e não acho que seja a maneira correta de armazenar um grande número de opções (eu adoraria agrupá-las de alguma forma).

2. Opções API - 1 opção como uma grande matriz.

Não sei bem como atualizar essa matriz usando formulários html, alguém? Eu acredito que deveria ser assim:

$opt['option1'] = foo
$opt['option2'] = foo
$opt['option3'] = bar

update_option('theme_settings',$opt);

E então no front end:

$settings = get_option('theme_settings');
echo $settings['option1']; 
echo $settings['option2']; 
echo $settings['option3']; 

Ouvi dizer que realmente diminui o número de consultas e tenho todas elas como uma opção. Eu adoraria usar este, mas como mencionei acima, não tenho certeza de como atualizar esse conjunto de opções no formulário de administração do Wordpress. Eu acho: <input type="hidden" name="theme_settings" value="option1,option2,option3,..." />substituirá a matriz em vez de adicionar novos elementos?

3. Configurações API - a nova maneira.

Requer muito código adicional:

function register_theme_settings() {
    //register our settings   
    register_setting( 'theme-settings', 'option1' );     
    register_setting( 'theme-settings', 'option2' );     
    register_setting( 'theme-settings', 'option3' );     
    register_setting( 'theme-settings', 'option4' );     
    register_setting( 'theme-settings', 'option5' );     
    // imagine this for 100 and more options    
};

E não tenho certeza de qual é a diferença entre isso e o método com uma opção como uma matriz?

tl; dr Então, como devo projetar meu armazenamento de configurações de tema para que funcione rapidamente e armazenar todas as opções / configurações em um só local, para que eu possa, por exemplo, fazer eco / despejar todas elas com uma função simples (sim , Quero fazer isso muito mal, mas não faço ideia de como fazer isso com esta API de configurações). O segundo método parece o melhor até agora.

Wordpressor
fonte

Respostas:

11

A API Options é principalmente uma API de banco de dados, permitindo obter e armazenar valores na tabela de opções do banco de dados facilmente.

A API de configurações é uma API de interface. Ele permite que você crie telas de configurações de uma maneira que se adapte a futuras alterações na interface do WordPress, bem como lide com a segurança (listas de permissões e validação e outras) de forma automática e mais fácil do que rolar seu próprio código.

Mais sobre a API de configurações: http://ottopress.com/2009/wordpress-settings-api-tutorial/

Otto
fonte
3
+1. A API de configurações é a abordagem correta e manipulará suas 100 opções de temas sem piscar de olhos. Algum tolo escreveu um tutorial muito longo para incorporar a API de configurações nos Temas do WordPress .
Chip Bennett
Otto, @Chip Bennett, obrigado. Tenho mais uma pergunta adicional - de acordo com a documentação, devo criar vários grupos de configurações para cada página de administrador. Isso afetará o desempenho / número de consultas de alguma forma? Há algo de errado em manter todas as opções dentro de um grupo (digamos 'configurações de tema'), como expliquei na minha questão de ler demais? :)
Wordpressor
2
Eu recomendaria usar apenas um grupo de opções. Se você precisar da organização da interface do usuário, use as seções de configurações e / ou as guias da página de configurações.
Chip Bennett
@Chip Bennett, tudo bem, muito obrigado :) Grande tutorial btw.
Wordpressor
Link @ChipBennett: a incorporação da API de configurações nos Temas do WordPress em seu comentário está quebrada.
Vijay Chavda