Filtrage des publications par métadonnées de publication

8

Je souhaite filtrer les articles de telle sorte que seuls les articles pour lesquels get_post_meta($post->ID, "project_cat", true)(il renvoie un ID d'article) est égal à ma valeur spécifiée soient affichés.

Une façon de faire ça?

Je suis particulièrement intéressé par les moyens de le faire compatible avec le plugin WP-Paginate .

porton
la source
56% est assez faible - n'oubliez pas de revenir à vos anciennes questions et d'accepter les bonnes réponses. Il les enlève de la pile «sans réponse» et aide les autres à trouver plus facilement des solutions. Les gens seront également plus disposés à offrir des réponses s'ils savent que le PO leur répondra. :)
Stephen Harris
Voir ma réponse ci-dessous. Il n'est pas clair quand / où vous souhaitez filtrer les messages. Si vous mettez à jour votre réponse pour l'inclure, je peux suggérer les «conditions» que vous devez vérifier. Sinon, consultez l'exemple de query_post lié. Le principe général est le même: définir la meta_queryvaleur.
Stephen Harris

Réponses:

11

L' WP_Queryobjet accepte un post-méta-argument. De manière générale, vous souhaitez effectuer les opérations suivantes:

  $my_query = new WP_Query( 
    array(
      'post_type' => 'post',
      'meta_query' => array(
        array(
          'key' => 'project_cat',
          'value' => 'my-value',
        )
      ),

        // Other query properties
    ) 
  );

Où «ma-valeur» est votre «valeur spécifiée».

Exemple d'utilisation:

  add_action( 'pre_get_posts' , 'my_pre_get_posts' );

  function my_pre_get_posts( $query ) {

    // Check this is main query and other conditionals as needed
    if( $query->is_main_query() ) {
        $query->set( 
          'meta_query', 
          array( 
            array(
              'key' => 'project_cat',
              'value' => 'my-value'
            )
          )
        );
    }

  }

Voir WP_Query , pre_get_posts . Tous les conditionnels sont à votre disposition. Actuellement, cela fonctionne sur chaque requête principale - ce que vous ne voulez probablement pas.

Vous pouvez également utiliser query_posts(une manière plus simple, mais beaucoup moins efficace) pour modifier la requête uniquement pour une instance spécifique dans un modèle.

Stephen Harris
la source
@TahirYasin - voir le codex .
Stephen Harris
1

vous pouvez filtrer la publication en fonction de la méta-valeur et afficher la publication sur la page cms.

'meta_query' => array(
        array(
            'key'     => 'front_page',
            'value'   => 'yes',
            'compare' => 'LIKE',
        ))

veuillez vous référer au tutoriel pour une explication étape par étape

http://www.pearlbells.co.uk/filter-posts-custom-fields-wp_query/

Liz Eipe C
la source