Chỉ số [0] cho các trường meta bài là gì?


10

Cố gắng cải thiện kiến ​​thức PHP của tôi thông qua kiểm tra và thử! Tôi bối rối về [0] đối số theo mã PHP WordPress

global $post;
$custom = get_post_custom($post->ID);
$price = $custom['price'][0];
$coMake = $custom['coMake'][0];

echo $custom['price'][0];

Có phải chúng để lập chỉ mục / tham chiếu đầu vào trên trang? Nếu vậy tại sao họ giống nhau?! bạn có thể vui lòng cho tôi biết tại sao và khi nào sử dụng chúng không?

Câu trả lời:


17

Mỗi khóa meta bài có thể có nhiều giá trị. Vì vậy, bạn nhận được các giá trị theo mặc định như là một mảng; mục đầu tiên ( 0) là mục cũ nhất.

get_post_custom()tìm nạp tất cả các khóa meta với giá trị của chúng. Bạn có thể đơn giản hóa mã của mình bằng:

$price  = get_post_meta( $post->ID, 'price', TRUE );
$comake = get_post_meta( $post->ID, 'coMake', TRUE );

Khi tham số cuối cùng get_post_meta()TRUE, WordPress sẽ trả về một giá trị duy nhất: mục nhập đầu tiên trong giá trị meta bài đăng cho khóa đã cho.

Cuộc gọi đầu tiên get_post_meta()sẽ tìm nạp và lưu trữ tất cả các giá trị meta cho ID bài đăng đó trong nền, vì vậy các cuộc gọi sau sẽ không dẫn đến các truy vấn cơ sở dữ liệu bổ sung.

Một ví dụ

Giả sử, chúng tôi tạo một khóa meta bài đăng có tên colorvà điền nó với ba giá trị khác nhau cho một bài đăng. Sau đó, chúng tôi làm tương tự với một phím age.

add_action( 'wp_loaded', function() {

    foreach ( array ( 'blue', 'red', 'yellow' ) as $color )
        add_post_meta( 561, 'color', $color, FALSE );

    foreach ( array ( '14', '40', '104' ) as $age )
        add_post_meta( 561, 'age', $age, FALSE );
});

Tham số cuối cùng FALSEyêu cầu WordPress không làm cho khóa meta này trở nên duy nhất - mà phải cho phép nhiều giá trị cho một khóa thay thế.

Cấu trúc kết quả trong postmetabảng của chúng tôi sẽ trông như thế này:

bàn

Mỗi hàng có một duy nhất meta_id, nhưng mỗi hàng post_idcó thể có nhiều meta_keys và mỗi hàng meta_keycó thể có nhiều meta_values.

Bây giờ, hãy tìm nạp tất cả các giá trị tùy chỉnh cho bài 561:

add_action( 'shutdown', function(){

    $custom = get_post_custom( 561 );
    print '<pre>' . esc_html( var_export( $custom, TRUE ) ) . '</pre>';
});

Kết quả:

array (
  '_edit_last' => 
  array (
    0 => '1',
  ),
  '_edit_lock' => 
  array (
    0 => '1367617428:1',
  ),
  'color' => 
  array (
    0 => 'blue',
    1 => 'red',
    2 => 'yellow',
  ),
  'age' => 
  array (
    0 => '14',
    1 => '40',
    2 => '104',
  ),
)

_edit_last_edit_locklà nội bộ WordPress, chúng tôi bỏ qua điều đó vào lúc này. Chỉ cần lưu ý, chúng ta cũng nhận được các giá trị này một mảng, mặc dù chỉ có một giá trị.
coloragelà các mảng giống như tất cả các giá trị meta bài.
$custom['color'][0]blue.

Bây giờ chúng tôi chỉ lấy màu với get_post_meta():

add_action( 'shutdown', function(){

    $color = get_post_meta( 561, 'color' );
    print '<pre>' . esc_html( var_export( $color, TRUE ) ) . '</pre>';
});

Kết quả:

array (
  0 => 'blue',
  1 => 'red',
  2 => 'yellow',
)

Chúng tôi chỉ nhận được một phần của giá trị meta của chúng tôi ở đây. $color[0]vẫn là blue. Đằng sau hậu trường, WordPress đã tìm nạp tất cả các giá trị tùy chỉnh, do đó, lần truy cập tiếp theo agesẽ được cung cấp từ bộ đệm.
Về mặt hiệu suất get_post_custom()get_post_meta()bằng nhau.

Lần thử cuối cùng: Lấy màu với get_post_meta()một giá trị duy nhất.

add_action( 'shutdown', function(){

    $color = get_post_meta( 561, 'color', TRUE );
    print '<pre>' . esc_html( var_export( $color, TRUE ) ) . '</pre>';
});

Kết quả : blue.

WordPress đã thực hiện những gì bạn đã làm trong mã của mình: Nó đã lấy khóa mảng 0và trả về giá trị dưới dạng chuỗi.

Đây là tùy chọn dễ đọc nhất, sử dụng nó để viết mã dễ hiểu.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.