Bunu cevaplamak için gittim ve bu konuda bazı testler yaptım ve sonuçlar aslında akıl almazdı.
İşte benim testim
Bunu kendiniz için bir test sayfası oluşturun. Sadece page.php dosyasını kopyalayın, yeniden adlandırın ve döngüyü silin. Şimdi arka uçta yeni bir sayfa oluşturun. Başlamadan önce, herhangi bir veri içermeyen sorgu miktarını almak için zamanlayıcınızı boş bilgilerle test edin
Bir test gönderisi için toplamda 5 meta alan oluşturdum,
enclosure
,
First name
,
Last name
,
packages
ve
post_views_count
Test yayınımın bir kimliği vardı 530
. Bir gönderinin içinde yalnızca gönderi kimliğini ayarlamak için $post->ID
veya tuşunu kullanabilirsiniz.get_the_ID()
İlk testim şöyle oldu:
<?php
timer_start();
$a = get_post_meta(530, 'enclosure', true);
$b = get_post_meta(530, 'First name', true);
$c = get_post_meta(530, 'Last name', true);
$d = get_post_meta(530, 'packages', true);
$e = get_post_meta(530, 'post_views_count', true);
?>
<p><?php echo get_num_queries(); ?> queries in <?php timer_stop(1, 5); ?> seconds. </p>
bu da bana aşağıdaki sonuçları verdi
0.00195 saniyede 1 sorgu.
İkinci testim şöyleydi:
<?php
timer_start();
$a = get_post_meta(530);
?>
<p><?php echo get_num_queries(); ?> queries in <?php timer_stop(1, 5); ?> seconds. </p>
bu da şaşırtıcı bir şekilde aynı sonucu verdi
0.00195 saniyede 1 sorgu.
Eğer bakarsak kaynak kodu için get_post_meta()
, bunu göreceksiniz get_post_meta()
için basitçe sadece bir sarıcı get_metadata()
. Bakmanız gereken buydu. Kaynak kodu için get_metadata()
, sen meta önbelleğe olduğunu göreceksiniz.
Yani hangisini kullanacağınız ve performans hakkında sorunuz üzerine, cevap size kalmış. Sonuçlarda kanıtı gördünüz
Kişisel görüşüme göre, 10 meta veri alanını (veya benim durumumda 5) almanız gerekiyorsa, cevabımda ikinci yaklaşımı kullanın.
$a = get_post_meta(530);
Sadece yazmak daha hızlı değil, aynı zamanda kodu tekrarlamamalısınız. Burada dikkat edilmesi gereken bir diğer nokta, ikinci yaklaşım, bir dizideki çok kolay erişilebilen ve alınabilen tüm meta alanları tutar
Örnek olarak, işte $a
birvar_dump( $a );
array(9) {
["_edit_lock"]=>
array(1) {
[0]=>
string(12) "1414838328:1"
}
["_edit_last"]=>
array(1) {
[0]=>
string(1) "1"
}
["_custom_sidebar_per_page"]=>
array(1) {
[0]=>
string(7) "default"
}
["post_views_count"]=>
array(1) {
[0]=>
string(1) "0"
}
["packages"]=>
array(1) {
[0]=>
string(1) "0"
}
["repeatable_names"]=>
array(1) {
[0]=>
string(79) "a:1:{i:0;a:3:{s:4:"role";s:4:"fool";s:4:"name";s:6:"Pieter";s:3:"url";s:0:"";}}"
}
["enclosure"]=>
array(1) {
[0]=>
string(105) "http://localhost/wordpress/wp-content/uploads/2014/09/Nissan-Navara-Tough-City.avi
13218974
video/avi
"
}
["First name"]=>
array(1) {
[0]=>
string(3) "Tom"
}
["Last name"]=>
array(1) {
[0]=>
string(5) "Storm"
}
}
Artık yayınınızdaki döndürülen meta verilere şu şekilde erişebilirsiniz:
echo $a['First name'][0] . " " . $a['Last name'][0] . "<br>";
Hangisi gösterilecek
Tom Storm