Чтобы ответить на это, я пошел и сделал несколько тестов по этому вопросу, и результаты на самом деле было ошеломляющим.
Вот мой тест
Для этого сами создайте себе тестовую страницу. Просто скопируйте page.php, переименуйте его и удалите цикл. Теперь просто создайте новую страницу в конце. Прежде чем начать, сначала проверьте ваш таймер с пустой информацией, чтобы получить количество запросов без каких-либо данных
Я создал 5 мета-полей для тестового поста,
enclosure
,
First name
,
Last name
,
packages
и
post_views_count
Мой тестовый пост имел идентификационный номер 530
. Внутри сообщения вы можете просто использовать $post->ID
или get_the_ID()
установить идентификатор сообщения
Итак, мой первый тест был следующим:
<?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>
который дал мне следующие результаты
1 запрос за 0.00195 секунд.
Мой второй тест был следующим:
<?php
timer_start();
$a = get_post_meta(530);
?>
<p><?php echo get_num_queries(); ?> queries in <?php timer_stop(1, 5); ?> seconds. </p>
что неожиданно дало тот же результат
1 запрос за 0.00195 секунд.
Если вы посмотрите на исходный код для get_post_meta()
, вы увидите, что get_post_meta()
это просто оболочка для get_metadata()
. Так что это, где вы должны посмотреть. Исходный код для get_metadata()
, вы увидите , что метаданные кэшироваться.
Так что на ваш вопрос о том, что использовать и о производительности, ответ будет, это зависит от вас. Вы видели доказательство в результатах
По моему личному мнению, если вам нужно получить 10 полей метаданных (или в моем случае 5), используйте второй подход в моем ответе.
$a = get_post_meta(530);
Это не только быстрее писать, но вы также не должны повторять код. Еще один момент, на который следует обратить внимание: второй подход содержит все мета-поля в массиве, к которым очень легко получить доступ и получить
Как пример, вот мой вывод, $a
если я сделаюvar_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"
}
}
Теперь вы можете получить доступ к любым возвращенным метаданным в вашем сообщении следующим образом:
echo $a['First name'][0] . " " . $a['Last name'][0] . "<br>";
Который будет отображать
Том Сторм