Qual é o índice [0] para os campos pós meta?

10

Tentando melhorar meu conhecimento em PHP por meio de teste e tente! Estou confuso em [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];

São para indexar / referenciar entradas na página? se assim for porque eles são iguais ?! você pode por favor me avisar por que e quando usá-los?

    
por Behseini 25.05.2013 / 10:14

1 resposta

16

Cada meta-chave do post 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() obtém 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 para get_post_meta() for TRUE , o WordPress retornará um único valor: a primeira entrada no valor pós meta para a chave fornecida.

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

Um exemplo

Digamos que criamos uma meta-chave de postagem com o nome color e 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 FALSE diz ao WordPress não para tornar esta meta-chave única - mas permite múltiplos valores para uma chave.

A estrutura resultante na nossa tabela postmeta será parecida com esta:

Cada linha tem um meta_id exclusivo, mas cada post_id pode ter vários meta_key s, e cada meta_key pode ter vários meta_value s.

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_last e _edit_lock são internos do WordPress, ignoramos isso no momento. Apenas observe que obtemos esses valores como um array também, embora exista apenas um valor.
color e age são matrizes como todos os pós meta valores.
$custom['color'][0] is 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',
)

Recebemos apenas uma parte dos nossos valores meta aqui. $color[0] ainda é blue . Nos bastidores, o WordPress já buscou todos valores personalizados, portanto, um próximo hit para age seria exibido no cache.
Em termos de desempenho, get_post_custom() e get_post_meta() são iguais.

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

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 em seu código: ele pegou a chave da matriz 0 e retornou o valor como uma string.

Esta é a opção mais legível, use-a para escrever códigos fáceis de entender.

    
por fuxia 25.05.2013 / 10:44