問題描述
嘗試透過測試來提高我的 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 內部構件,我們暫時忽略。請注意,儘管只有一個值,我們也可以將這些值設定為陣列。 color 和 age 是所有 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 輔助翻譯的英文資料結果。如果您對結果不滿意,可以加入我們改善翻譯效果:薇曉朵技術論壇。
