Echo todas as chaves meta de um TYPE de postagem personalizada

3

Existe uma maneira de despejar uma lista de todas as meta-chaves sendo usadas por todas as postagens pertencentes a um tipo de postagem personalizada?

Ou seja, um tipo de alimento denominado post, cada alimento (presunto, espaguete, frango), pode ter uma meta-chave diferente, que é gerada dinamicamente. Não sei quais meta-chaves foram adicionadas, mas gostaria de poder usar uma lista de todas elas.

    
por marctain 18.07.2012 / 06:21

3 respostas

8

Você pode usar uma consulta simples para obter uma lista distinta de meta_keys inseridas pelo usuário para um tipo de postagem específico e, em seguida, armazenar os resultados em cache usando a API Transients. As chaves meta desta consulta serão aquelas que não começam com um sublinhado ou número.

function generate_foods_meta_keys(){
    global $wpdb;
    $post_type = 'foods';
    $query = "
        SELECT DISTINCT($wpdb->postmeta.meta_key) 
        FROM $wpdb->posts 
        LEFT JOIN $wpdb->postmeta 
        ON $wpdb->posts.ID = $wpdb->postmeta.post_id 
        WHERE $wpdb->posts.post_type = '%s' 
        AND $wpdb->postmeta.meta_key != '' 
        AND $wpdb->postmeta.meta_key NOT RegExp '(^[_0-9].+$)' 
        AND $wpdb->postmeta.meta_key NOT RegExp '(^[0-9]+$)'
    ";
    $meta_keys = $wpdb->get_col($wpdb->prepare($query, $post_type));
    set_transient('foods_meta_keys', $meta_keys, 60*60*24); # create 1 Day Expiration
    return $meta_keys;
}

Para obter uma lista de meta_keys no seu modelo para gerar sua lista suspensa, use a seguinte função:

function get_foods_meta_keys(){
    $cache = get_transient('foods_meta_keys');
    $meta_keys = $cache ? $cache : generate_foods_meta_keys();
    return $meta_keys;
}

$meta_keys = get_foods_meta_keys();
    
por Brian Fegter 18.07.2012 / 07:45
1

Eu acredito que você teria que primeiro fazer uma consulta para reunir todas as chaves meta para todo o tipo de postagem personalizada em uma matriz. Então, algo assim:

$args = array(
    'post_type' => 'custom-post-type-name',
    );
$cpts = new WP_Query($args);
if($cpts->have_posts()) : while($cpts->have_posts() ) : $cpts->the_post();
    $meta_values[] = get_post_meta($post->ID);
endwhile; endif;

Todos os seus valores meta serão armazenados em uma matriz $meta_values .

Você pode fazer um var_dump($meta_values) para ver o conteúdo da matriz para ter certeza.

    
por Aaron Holbrook 18.07.2012 / 07:19
0

Use get_post_custom para obter todas as chaves e valores.

Existe também uma função chamada get_post_custom_keys() que você pode usar para recuperar todas as meta-chaves.

    
por KeepMove 16.10.2015 / 16:38