Để trả lời điều này, tôi đã thực hiện một số thử nghiệm về vấn đề này và kết quả thực sự rất tuyệt vời.
Đây là bài kiểm tra của tôi
Để điều này chính mình, thiết lập cho mình với một trang thử nghiệm. Chỉ cần sao chép page.php, đổi tên nó và xóa vòng lặp. Bây giờ chỉ cần tạo một trang mới ở phía sau. Trước khi bắt đầu, trước tiên hãy kiểm tra bộ đếm thời gian của bạn với thông tin trống để có được số lượng truy vấn mà không có bất kỳ dữ liệu nào
Tôi đã tạo hoàn toàn 5 trường meta cho một bài kiểm tra,
enclosure
,
First name
,
Last name
,
packages
và
post_views_count
Bài kiểm tra của tôi đã có một ID của 530
. Trong một bài đăng, bạn chỉ cần sử dụng $post->ID
hoặc get_the_ID()
để đặt ID bài đăng
Vì vậy, thử nghiệm đầu tiên của tôi là như sau:
<?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>
đã cho tôi kết quả như sau
1 truy vấn trong 0,00195 giây.
Bài kiểm tra thứ hai của tôi như sau:
<?php
timer_start();
$a = get_post_meta(530);
?>
<p><?php echo get_num_queries(); ?> queries in <?php timer_stop(1, 5); ?> seconds. </p>
trong đó, đáng ngạc nhiên đã cho kết quả tương tự
1 truy vấn trong 0,00195 giây.
Nếu bạn nhìn vào các mã nguồn cho get_post_meta()
, bạn sẽ thấy rằng get_post_meta()
chỉ đơn giản là chỉ là một wrapper cho get_metadata()
. Vì vậy, đây là bạn cần phải nhìn. Các mã nguồn cho get_metadata()
, bạn sẽ thấy rằng các siêu dữ liệu được lưu trữ.
Vì vậy, về câu hỏi của bạn về việc sử dụng và về hiệu suất, câu trả lời sẽ là tùy thuộc vào bạn. Bạn đã thấy bằng chứng trong kết quả
Theo ý kiến cá nhân của tôi, nếu bạn cần truy xuất 10 trường dữ liệu meta, (hoặc trong trường hợp của tôi 5), hãy sử dụng phương pháp thứ hai trong câu trả lời của tôi.
$a = get_post_meta(530);
Nó không chỉ nhanh hơn để viết, mà bạn cũng không nên lặp lại mã. Một điểm khác cần lưu ý ở đây, cách tiếp cận thứ hai chứa tất cả các trường meta trong một mảng có thể dễ dàng truy cập và truy xuất
Cũng giống như vấn đề, đây là đầu ra của tôi $a
nếu tôi làmvar_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"
}
}
Bây giờ bạn có thể truy cập bất kỳ dữ liệu meta nào được trả lại trong bài đăng của mình như sau:
echo $a['First name'][0] . " " . $a['Last name'][0] . "<br>";
Cái nào sẽ hiển thị
Cơn bão Tom