Support » Allgemeine Fragen » [Gelöst] pre_get_posts und meta-value nicht gesetzt

  • Hallo,
    hoffe ihr könnt mir weiterhelfen.

    Wie kann ich bei pre_get_posts sagen, dass mir alle beiträge angezeigt
    werden die NICHT das meta_value „special“ besitzen?

    Versucht habe ich

    //     $query->set( 'meta_value', '' );
    //     $query->set( 'meta_value', 0 );
    //     $query->set( 'meta_value', false );

    mein code sieht folgerndermaßen aus

    if(isset($_GET['special']))
    {
         $query->set( 'meta_key', 'special' );
         $query->set( 'meta_value', 1 );
         return $query;
    }
    else
    {
         $query->set( 'meta_key', 'special' );
         $query->set( 'meta_value', ????????? );
         return $query;
    }

    Freue mich über jeden Tipp 🙂

Ansicht von 2 Antworten - 1 bis 2 (von insgesamt 2)
  • Ist seit 3.5 möglich: http://core.trac.wordpress.org/ticket/18158

    Du erstellst Dir also eine neue Meta-Query mit dem compare-Parameter auf „NOT EXISTS“:

    $meta-check = array(
      array(
        'key' => 'meta_key',
        'compare' => 'NOT EXISTS'
      )
    )

    und fügst das in den normnalen Workflow ein:

    function your_function($query) {
        if ( !is_admin() && $query->is_main_query() ) {
                $query->set( 'meta_key', 'special' );
                $query->set( 'meta_value', 'value' );
        }
    }
    add_action( 'pre_get_posts', 'your_function' );

    Quelle: http://devotepress.com/wordpress-coding/when-to-use-pre_get_posts-in-wordpress/#.UsF2q_a140w

    Und hast dann dies hier (abgewandelt vom Event-Beispiel von Bill Erickson):

    /**
    * Customize Event Query using Post Meta
    *
    * @author Bill Erickson
    * @link http://www.billerickson.net/customize-the-wordpress-query/
    * @param object $query data
    *
    */
    function be_special_query( $query ) {
      if( $query->is_main_query() && !$query->is_feed() && !is_admin() ) {
      $meta_query = array(
        array(
          'key' => 'special',
          /* 'value' => '', wird nicht benötigt, da ja nur auf Existenz geprüft wird */
          'compare' => 'NOT EXISTS'
          )
        );
    $query->set( 'meta_query', $meta_query );
    }
    
    }
    add_action( 'pre_get_posts', 'be_special_query' );

    Gesetzt wird also nur das eigene Query und darin ist in dem Array der Vergleichswert mit „NOT EXISTS“ angeben, so kann man Meta-Values auf Existenz prüfen ohne das überall ein Default-Wert wie false stehen muss.

    Der Code ist ungetestet, wenn Du erfolgreich warst, wäre es cool, wenn Du nochmal Feedback geben würdest ob und wie es geklappt hat!

    Danke.

    Gruß, Torsten

    Thread-Starter simpleXX

    (@simplexx)

    Hey Torsten,
    danke dir!

Ansicht von 2 Antworten - 1 bis 2 (von insgesamt 2)
  • Das Thema „[Gelöst] pre_get_posts und meta-value nicht gesetzt“ ist für neue Antworten geschlossen.