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 .


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.


@TahirYasin - voir le codex .
Stephen Harris

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.