Per rispondere a questo, sono andato e ho fatto alcuni test su questo, e i risultati sono stati davvero strabilianti.
Ecco il mio test
A te stesso, imposta una pagina di prova. Basta semplicemente copiare page.php, rinominarlo ed eliminare il loop. Ora crea una nuova pagina nel back-end. Prima di iniziare, prova il timer con informazioni vuote per ottenere la quantità di query senza dati
Ho creato 5 metacampi per un post di prova,
enclosure
,
First name
,
Last name
,
packages
e
post_views_count
Il mio post di prova aveva un ID di 530
. All'interno di un post puoi semplicemente usare $post->ID
o get_the_ID()
impostare l'ID del post
Quindi il mio primo test è stato il seguente:
<?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>
che mi ha dato i seguenti risultati
1 query in 0,00195 secondi.
Il mio secondo test è stato il seguente:
<?php
timer_start();
$a = get_post_meta(530);
?>
<p><?php echo get_num_queries(); ?> queries in <?php timer_stop(1, 5); ?> seconds. </p>
che, sorprendentemente, ha dato lo stesso risultato
1 query in 0,00195 secondi.
Se guardi il codice sorgente di get_post_meta()
, vedrai che get_post_meta()
è semplicemente un wrapper per get_metadata()
. Quindi questo è dove devi guardare. Il codice sorgente per get_metadata()
, vedrai che i metadati vengono memorizzati nella cache.
Quindi sulla tua domanda su quale utilizzare e sulle prestazioni, la risposta sarà, dipende da te. Hai visto la prova nei risultati
Secondo la mia opinione personale, se hai bisogno di recuperare 10 campi di metadati (o nel mio caso 5), usa il secondo approccio nella mia risposta.
$a = get_post_meta(530);
Non è solo più veloce da scrivere, ma non dovresti ripetere il codice. Un altro punto da notare qui, il secondo approccio contiene tutti i metacampi in un array a cui è possibile accedere e recuperare facilmente
Proprio come esempio, ecco il mio output da $a
se faccio unvar_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"
}
}
Ora puoi accedere a uno qualsiasi dei metadati restituiti nel tuo post come segue:
echo $a['First name'][0] . " " . $a['Last name'][0] . "<br>";
Quale verrà visualizzato
Tom Storm