Para que serve o índice [0] nos meta metadados pós?

10

Tentando melhorar meu conhecimento de PHP através de test and try! Estou confuso com [0] argumentos no seguinte código PHP do WordPress

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

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

Eles servem para indexar / referenciar entradas na página? Se sim, por que são iguais ?! você pode me informar por que e quando usá-los?

Behseini
fonte

Respostas:

17

Cada meta-chave de postagem pode ter vários valores. Então você obtém os valores por padrão como uma matriz; a primeira entrada ( 0) é a mais antiga.

get_post_custom()busca todas as meta chaves com seus valores. Você pode simplificar seu código com:

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

Quando o último parâmetro for get_post_meta()for TRUE, o WordPress retornará um único valor: a primeira entrada no meta-valor da postagem para a chave especificada.

A primeira chamada para get_post_meta()buscará e armazenará em cache todos os meta-valores para esse ID de postagem em segundo plano; portanto, as chamadas posteriores não resultarão em consultas adicionais ao banco de dados.

Um exemplo

Digamos que criamos uma meta-chave de postagem chamada colore a preenchemos com três valores diferentes para uma postagem. Então fazemos o mesmo com uma chave 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 );
});

O último parâmetro FALSEdiz ao WordPress para não tornar essa meta-chave exclusiva - mas permitir vários valores para uma chave.

A estrutura resultante em nossa postmetatabela ficará assim:

tabela

Cada linha tem um único meta_id, mas cada um post_idpode ter vários meta_keys e cada um meta_keypode ter vários meta_values.

Agora vamos buscar todos os valores personalizados para a postagem 561:

add_action( 'shutdown', function(){

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

Resultado:

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_locksão internos do WordPress, ignoramos isso por enquanto. Observe que também obtemos esses valores e uma matriz, embora exista apenas um valor.
colore agesão matrizes como todos os valores meta pós.
$custom['color'][0]é blue.

Agora, buscamos apenas a cor com get_post_meta():

add_action( 'shutdown', function(){

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

Resultado:

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

Temos aqui apenas uma parte dos nossos meta-valores. $color[0]ainda está blue. Nos bastidores, o WordPress já buscou todos os valores personalizados, portanto, um próximo hit ageseria veiculado no cache.
Em termos de desempenho get_post_custom()e get_post_meta()são iguais.

Última tentativa: obtenha a cor get_post_meta()como um único valor.

add_action( 'shutdown', function(){

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

Resultado: blue.

O WordPress fez o que você fez no seu código: Ele pegou a chave da matriz 0e retornou o valor como uma string.

Essa é a opção mais legível, use-a para escrever um código fácil de entender.

fuxia
fonte