A cosa serve l'indice [0] per i meta-campi post?


10

Sto provando a migliorare la mia conoscenza di PHP attraverso test e prova! Sono confuso su [0] argomenti a seguito del codice PHP di WordPress

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

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

Sono per indicizzare / fare riferimento agli input nella pagina? se è così perché sono uguali ?! puoi per favore farmi sapere perché e quando usarli?

Risposte:


17

Ogni meta chiave post può avere più valori. Quindi ottieni i valori di default come un array; la prima voce ( 0) è la più vecchia.

get_post_custom()recupera tutte le meta-chiavi con i loro valori. Puoi semplificare il tuo codice con:

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

Quando l'ultimo parametro per get_post_meta()è TRUE, WordPress restituirà un singolo valore: la prima voce nel meta valore post per la chiave specificata.

La prima chiamata a get_post_meta()recupererà e memorizzerà nella cache tutti i meta valori per quell'ID post in background, quindi le chiamate successive non daranno luogo a query aggiuntive sul database.

Un esempio

Diciamo, creiamo una meta chiave post denominata colore la riempiamo con tre valori diversi per un post. Quindi facciamo lo stesso con una chiave 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 );
});

L'ultimo parametro FALSEdice a WordPress di non rendere unica questa meta-chiave , ma di consentire invece più valori per una chiave.

La struttura risultante nella nostra postmetatabella sarà simile a questa:

tavolo

Ogni riga ha un unico meta_id, ma ognuna post_idpuò avere più meta_keys e ognuna meta_keypuò avere più meta_values.

Ora prendiamo tutti i valori personalizzati per il post 561:

add_action( 'shutdown', function(){

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

Risultato:

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_laste _edit_locksono interni di WordPress, per il momento lo ignoriamo. Basta notare che questi valori sono anche un array, anche se esiste un solo valore.
colore agesono matrici come tutti i meta-valori post.
$custom['color'][0]lo è blue.

Ora prendiamo solo il colore con get_post_meta():

add_action( 'shutdown', function(){

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

Risultato:

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

Otteniamo solo un pezzo dei nostri meta valori qui. $color[0]è ancora blue. Dietro le quinte, WordPress ha già recuperato tutti i valori personalizzati, quindi un colpo successivo per agesarebbe servito dalla cache.
In termini di prestazioni get_post_custom()e get_post_meta()sono uguali.

Ultimo tentativo: ottieni il colore get_post_meta()come valore singolo.

add_action( 'shutdown', function(){

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

Risultato: blue.

WordPress ha fatto ciò che hai fatto nel tuo codice: ha preso la chiave dell'array 0e ha restituito il valore come stringa.

Questa è l'opzione più leggibile, usala per scrivere codice facile da capire.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.