Seçenekler ve Ayarlar arasındaki fark nedir?


14

Ve hangisini kullanmalıyım?

Seçenekler API'sı ve Ayarlar API'sı arasındaki fark nedir ?

100'den fazla yönetici seçeneğine sahip bir temam var, bunları nasıl kaydedip saklamalıyım? Şu anda Seçenekler API'sini kullanıyorum ama bundan çok memnun değilim, her bir seçenek ayrı olarak kaydediliyor, böylece birçok veritabanı sorgusu oluşturuyorlar.

Şu anda WordPress seçeneklerini / ayarlarını depolamanın üç yolunu görüyorum:

1. Seçenekler API - eski (en kötü?) Yol.

(Bunu zaten kullanıyorum)

<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>

Ve sonra ön uçta:

echo get_option('option1'); 

Çirkin görünüyor ve bunun çok sayıda seçeneği depolamanın doğru yolu olduğunu düşünmüyorum (onları bir şekilde gruplamak isterim).

2. Seçenekler API - büyük bir dizi olarak 1 seçenek.

Nasıl html formları kullanarak bu diziyi güncellemek için emin değilim, kimse? Gibi olması gerektiğine inanıyorum:

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

update_option('theme_settings',$opt);

Ve sonra ön uçta:

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

Sorgu sayısını gerçekten azalttığını duydum ve hepsini tek bir seçenek olarak görüyorum. Bunu kullanmak isterdim ama yukarıda da belirttiğim gibi, bu seçenek dizisini Wordpress yönetici formunda nasıl güncelleyeceğimi bilmiyorum. Sanırım: <input type="hidden" name="theme_settings" value="option1,option2,option3,..." />yeni öğeler eklemek yerine dizinin üzerine yazacak mı?

3. Ayarlar API'sı - yeni yol.

Çok fazla ek kod gerektirir:

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

Ve bir seçenek olarak bir seçenek ile bu yöntem arasındaki fark nedir emin değilim?

tl; dr Öyleyse, hızlı bir şekilde çalışacak ve tüm seçenekleri / ayarları tek bir yerde saklayacak şekilde tema ayarları depolama alanımı nasıl yansıtmalıyım , örneğin hepsini tek bir basit işlevle yankı / dökümü yapabiliyorum (evet , Bunu kötü yapmak istiyorum, ancak bu Ayarlar API'sı ile nasıl yapacağımı bilmiyorum). İkinci yöntem şimdiye kadar en iyi görünüyor.

Yanıtlar:


11

Seçenekler API'si öncelikle veritabanının seçenekler tablosundaki değerleri kolayca almanızı ve depolamanızı sağlayan bir veritabanı API'sıdır.

Ayarlar API'sı bir arayüz API'sıdır. Ayarlar ekranlarını WordPress arabiriminde gelecekteki değişikliklere uyum sağlayacak şekilde oluşturmanıza ve güvenliği (nonces ve beyaz listeye alma ve doğrulama vb.) Otomatik olarak ve kendi kodunuzu döndürmekten daha kolay bir şekilde gerçekleştirmenize olanak tanır.

Ayarlar API'sı hakkında daha fazla bilgi: http://ottopress.com/2009/wordpress-settings-api-tutorial/


3
+1. Ayarlar API'sı doğru yaklaşımdır ve 100 Tema seçeneğinize göz atmadan işlem yapar. Bazı aptallar , Ayarlar API'sını WordPress Temalarına dahil etmek için gerçekten uzun soluklu bir öğretici yazdı .
Chip Bennett

Otto, @Chip Bennett teşekkür ederim çocuklar. Başka bir sorum daha var - belgelere göre her yönetici sayfası için birden fazla ayar grubu oluşturmalıyım, performansı / sorgu sayısını bir şekilde etkiler mi? Okumak için çok uzun süren açıklamamda açıkladığım gibi, tüm seçenekleri tek bir grupta tutmakta bir sorun var mı (diyelim 'tema ayarları')? :)
Wordpressor

2
Sadece bir seçenek grubu kullanmanızı tavsiye ederim . Kullanıcı arayüzü kuruluşuna ihtiyacınız varsa ayarlar bölümlerini ve veya ayarlar sayfası sekmelerini kullanın.
Chip Bennett

@ Chip Bennett, tamam, çok teşekkürler :) Harika öğretici btw.
Wordpressor

@ChipBennett Link: Ayarlar API'sini WordPress Temalarına yorumunuza dahil etmek bozuldu.
Vijay Chavda
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.