पोस्ट मेटा फ़ील्ड के लिए सूचकांक [0] क्या है?


10

परीक्षण के माध्यम से अपने PHP ज्ञान में सुधार करने की कोशिश करो और कोशिश करो! मैं वर्डप्रेस PHP कोड का पालन करने पर [0] तर्कों पर भ्रमित हूं

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

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

क्या वे पृष्ठ पर इनपुट्स को अनुक्रमण / संदर्भित करने के लिए हैं? यदि ऐसा है तो वे एक ही क्यों हैं ?! क्या आप कृपया मुझे बता सकते हैं कि उनका उपयोग क्यों और कब करना है?

जवाबों:


17

प्रत्येक पोस्ट मेटा कुंजी में कई मान हो सकते हैं। तो आप एक सरणी के रूप में डिफ़ॉल्ट रूप से मान प्राप्त करते हैं; पहली प्रविष्टि ( 0) सबसे पुरानी है।

get_post_custom()अपने मूल्यों के साथ सभी मेटा कुंजी को लाते हैं। आप अपने कोड को सरल बना सकते हैं:

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

जब अंतिम पैरामीटर get_post_meta()है TRUE, तो वर्डप्रेस एकल मान लौटाएगा: दिए गए कुंजी के लिए पोस्ट मेटा मूल्य में पहली प्रविष्टि।

बैकग्राउंड में उस पोस्ट आईडी के लिए सभी मेटा मानों get_post_meta()को लाने और कैश करने के लिए पहली कॉल होगी , इसलिए बाद में कॉल करने पर अतिरिक्त डेटाबेस प्रश्नों का परिणाम नहीं होगा।

एक उदाहरण

मान लीजिए, हम एक पोस्ट मेटा कुंजी नामित करते हैं 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वर्डप्रेस को इस मेटा कुंजी को अद्वितीय नहीं बनाने के लिए कहता है - लेकिन इसके बजाय एक कुंजी के लिए कई मानों को अनुमति देने के लिए।

हमारी postmetaतालिका में परिणामी संरचना इस तरह दिखाई देगी:

तालिका

प्रत्येक पंक्ति में एक अद्वितीय है meta_id, लेकिन प्रत्येक post_idमें कई meta_keys हो सकते हैं , और प्रत्येक meta_keyमें कई meta_values हो सकते हैं ।

अब 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वर्डप्रेस इंटर्नल्स हैं, हम उस समय के लिए इसे अनदेखा करते हैं। बस ध्यान दें, हमें इन मूल्यों को एक सरणी भी मिलती है, हालांकि सिर्फ एक मूल्य है।
colorऔर ageसभी पोस्ट मेटा मानों की तरह सरणियाँ हैं।
$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। पर्दे के पीछे, वर्डप्रेस पहले से ही सभी कस्टम मूल्यों को प्राप्त कर चुका है , इसलिए 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

वर्डप्रेस ने आपके कोड में क्या किया है: यह सरणी कुंजी ले लिया है 0और एक स्ट्रिंग के रूप में मान लौटा दिया है।

यह सबसे पठनीय विकल्प है, इसे कोड लिखने के लिए उपयोग करें जो समझने में आसान है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.