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 .


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).


@ TahirYasin - siehe den Kodex .
Stephen Harris

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.