Filtern von Posts nach Post-Metadaten

8

Ich möchte Beiträge so filtern, dass nur Beiträge get_post_meta($post->ID, "project_cat", true)angezeigt werden , für die (es wird eine Beitrags-ID zurückgegeben) meinem angegebenen Wert entspricht.

Wie kann man das machen?

Ich interessiere mich besonders für Möglichkeiten, dies mit dem WP-Paginate-Plugin kompatibel zu machen .

porton
quelle
56% sind ziemlich niedrig - bitte denken Sie daran, zu Ihren alten Fragen zurückzukehren und korrekte Antworten zu akzeptieren. Es nimmt sie vom "unbeantworteten" Stapel und hilft anderen, leichter Lösungen zu finden. Die Menschen werden auch eher bereit sein, Antworten zu geben, wenn sie wissen, dass das OP auf sie reagieren wird. :)
Stephen Harris
Siehe meine Antwort unten. Es ist nicht klar, wann / wo Sie die Beiträge filtern möchten. Wenn Sie Ihre Antwort aktualisieren, um dies einzuschließen, kann ich vorschlagen, welche "Bedingungen" Sie überprüfen müssen. Alternativ finden Sie das Beispiel für den verknüpften query_post. Das allgemeine Prinzip ist dasselbe - den meta_queryWert einstellen .
Stephen Harris

Antworten:

11

Das WP_QueryObjekt akzeptiert ein Post-Meta-Argument. Im Allgemeinen möchten Sie Folgendes tun:

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

        // Other query properties
    ) 
  );

Wobei 'mein Wert' Ihr 'angegebener Wert' ist.

Anwendungsbeispiel:

  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'
            )
          )
        );
    }

  }

Siehe WP_Query , pre_get_posts . Alle Bedingungen stehen Ihnen zur Verfügung. Derzeit läuft dies auf jeder Hauptabfrage - die Sie wahrscheinlich nicht wollen.

Alternativ können Sie query_postsdie Abfrage nur für eine bestimmte Instanz in einer Vorlage ändern (auf einfachere, aber weniger effiziente Weise).

Stephen Harris
quelle
@ TahirYasin - siehe den Kodex .
Stephen Harris
1

Sie können den Beitrag basierend auf dem Metawert filtern und den Beitrag auf der CMS-Seite anzeigen.

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

Weitere Informationen finden Sie im Tutorial

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

Liz Eipe C.
quelle