Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Advanced WP_Query

Advanced WP_Query

Take a quick look at the $wp_query global object, learn how to alter it without using query_posts(), and create some custom WP_Query objects to get the posts you need.

Alison Barrett

July 25, 2014
Tweet

More Decks by Alison Barrett

Other Decks in Programming

Transcript

  1. $my_query  =  new  WP_Query(  'orderby=title&order=ASC'  );   ! $my_query  =

     new  WP_Query(  array(     'orderby'  =>  'title',     'order'      =>  'ASC',   )  );
  2. if  (  have_posts()  )  :       while  (

     have_posts()  )  :           the_post();
  3. if  (  $my_query-­‐>have_posts()  )  :       while  (

     $my_query-­‐>have_posts()  )  :           $my_query-­‐>the_post();
  4. $my_query  =  new  WP_Query(  array(     'posts_per_page'    

           =>  5,     'orderby'                          =>  'comment_count',     'ignore_sticky_posts'  =>  true,   )  );
  5. $my_query  =  new  WP_Query(  array(     'post_type'  =>  'ag_movie_review',

        'tax_query'  =>  array(       'relation'  =>  'AND',       array(         'taxonomy'  =>  'ag_genre',         'field'        =>  'slug',         'terms'        =>  'thriller',       ),       array(         'taxonomy'  =>  'ag_actor',         'field'        =>  'slug',         'terms'        =>  'anthony-­‐hopkins',       ),       array(         'taxonomy'  =>  'ag_decade',         'field'        =>  'slug',         'terms'        =>  '2000s',       ),     ),   )  );
  6. $my_query  =  new  WP_Query(  array(     'post_type'    

           =>  array(       'post',       'ag_debate',       'ag_interview'     ),     'meta_query'          =>  array(       array(         'key'          =>  '_ag_related_event',         'compare'  =>  'EXISTS',       ),     ),     'posts_per_page'  =>  12,   )  );
  7. ‣ muplugins_loaded ‣ … ‣ init ‣ parse_request ‣ parse_query

    ‣ pre_get_posts ‣ posts_selection ‣ … ‣ template_redirect Turn URL into query string Populate $wp_query object Pull posts from database Load template file
  8. ‣ muplugins_loaded ‣ … ‣ init ‣ parse_request ‣ parse_query

    ‣ pre_get_posts ‣ posts_selection ‣ … ‣ template_redirect Turn URL into query string Populate $wp_query object Alter $wp_query object Pull posts from database Load template file
  9. function  ag_home_page_no_sticky(  $query  )  {     if  (  $query-­‐>is_home()

     )  {       $query-­‐>set(  'ignore_sticky_posts',  true  );     }   }   add_action(  'pre_get_posts',  'ag_home_page_no_sticky'  );
  10. function  ag_home_page_no_sticky(  $query  )  {     if  (  $query-­‐>is_home()

     &&  $query-­‐>is_main_query()  )  {       $query-­‐>set(  'ignore_sticky_posts',  true  );     }   }   add_action(  'pre_get_posts',  'ag_home_page_no_sticky'  );
  11. function  ag_movies_in_search(  $query  )  {     if  (  $query-­‐>is_search()

     &&  $query-­‐>is_main_query()  )  {       $query-­‐>set(  'post_type',  array(  'post',  'ag_movie'  )  );     }   }   add_action(  'pre_get_posts',  'ag_movies_in_search'  );