問題描述

嘗試透過測試來提高我的 PHP 知識,並嘗試!我對以下 WordPress PHP 程式碼的 [0] 引數感到困惑

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

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

是否在頁面上索引/引用輸入?如果是這樣,為什麼他們是一樣的?你能不能讓我知道為什麼和何時使用它們?

最佳解決方案

每個後期元鍵可以有多個值。所以你預設得到陣列作為陣列; 第一個條目 (0) 是最早的。

get_post_custom()使用它們的值獲取所有元鍵。您可以簡化您的程式碼:

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

get_post_meta()的最後一個引數為 TRUE 時,WordPress 將返回單個值:給定鍵的後期值中的第一個條目。

get_post_meta()的第一次呼叫將在後臺獲取並快取該帖子 ID 的所有元值,因此稍後的呼叫不會導致額外的資料庫查詢。

一個例子

假設我們建立一個名為 color 的後期元鍵,併為一個帖子填充三個不同的值。然後我們用一個關鍵的 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 );
});

最後一個引數 FALSE 告訴 WordPress 不要使這個元鍵是唯一的 – 但是允許一個鍵的多個值。

我們 postmeta 表中的結果將如下所示:

每行都有獨特的 meta_id,但每個 post_id 都可以有多個 meta_key,每個 meta_key 都可以有多個 meta_value

現在我們來獲取 post 561 的所有自定義值:

add_action( 'shutdown', function(){

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

結果:

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_lock 是 WordPress 內部構件,我們暫時忽略。請注意,儘管只有一個值,我們也可以將這些值設定為陣列。 colorage 是所有 post 元值之類的陣列。 $custom['color'][0]blue

現在我們用 get_post_meta()獲取顏色:

add_action( 'shutdown', function(){

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

結果:

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

我們在這裡只得到一個元值。 $color[0]仍然是 blue 。在幕後,WordPress 已經獲取了所有自定義值,因此 age 的下一個命中將從快取中提供。在效能方面,get_post_custom()get_post_meta()相同。

最後一次嘗試:使用 get_post_meta()獲取顏色作為單個值。

add_action( 'shutdown', function(){

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

結果:blue

WordPress 已經完成了您在程式碼中所做的工作:它採用陣列鍵 0,並將該值作為字串返回。

這是最可讀的選項,用它來編寫易於理解的程式碼。

參考文獻

注:本文內容整合自 Google/Baidu/Bing 輔助翻譯的英文資料結果。如果您對結果不滿意,可以加入我們改善翻譯效果:薇曉朵技術論壇。