web-dev-qa-db-fra.com

Comment nous get_post_meta sans post id

Je veux obtenir mon tout posts-meta, mais sur la base de key. Par exemple, la requête principale pour obtenir le post-méta est

 <?php $meta_values = get_post_meta($post_id, $key, $single); ?> 

Maintenant, je veux obtenir ce post-meta sur la base de key uniquement. Ma requête actuelle pour obtenir le post-meta est

<?php echo get_post_meta($post->ID, 'custom_tags'.$userID, true); ?>

Et je veux supprimer $post->ID de cette requête est-il possible d'obtenir cela. Merci

4
Adi

$post->ID est ce qui distingue la méta-valeur de tous les articles ayant la même clé méta.

Donc, si vous voulez abréger l'appel get_post_meta pour le poste actuel, vous pouvez le faire:

function get_cuurent_post_meta($key){
    global $post;
    return get_post_meta($post->ID,$key,true);
}

et vous pouvez l'appeler comme ceci:

echo get_cuurent_post_meta('custom_tags'.$userID);

Maintenant, si ce n'est pas le post actuel, mais n'importe quel post, vous pouvez le faire:

function get_meta_value_by_key($meta_key,$limit = 1){
    global $wpdb;
    if (1 == $limit)
        return $value = $wpdb->get_var( $wpdb->prepare("SELECT meta_value FROM $wpdb->postmeta WHERE meta_key = %s LIMIT 1" , $meta_key) );
    else
        return $value = $wpdb->get_results( $wpdb->prepare("SELECT meta_value FROM $wpdb->postmeta WHERE meta_key = %s LIMIT %d" , $meta_key,$limit) );
}

pour obtenir la première méta-valeur de cette clé, appelez-la comme ceci:

echo get_meta_value_by_key('custom_tags'.$userID);

et pour obtenir toutes les méta-valeurs de cette clé, utilisez le $limit param ex:

$post_meta_array = get_meta_value_by_key('custom_tags'.$userID, 999);
8
Bainternet

Vous pouvez interroger directement votre table postmeta en utilisant quelque chose comme:

global $wpdb;

$metas = $wpdb->get_results( 
  $wpdb->prepare("SELECT meta_value FROM $wpdb->postmeta where meta_key = %s", 'add_your_key_here')
 );

echo '<pre>';
print_r( $metas );
echo '</pre>';

UPDATEAprès avoir obtenu votre $metas, vous les passez en boucle pour afficher les valeurs:

if( count($metas) > 0 ){ #check if we got any results
  foreach ($metas as $meta){
    echo $meta->meta_value . "<br />";
  }
}
2
RRikesh