Output before and after the loop

I’d like to hook into the loop, ie. have_posts() maybe? and output some code before and after. Is there a filter for this so I can use it in a plugin without needing to edit themes?

Related posts

2 comments

  1. The function the_post() (source) triggers the action loop_start when it is first used in the loop. This is used in every WP_Query loop, so you may want to check if the current query is the ‘main’ one (assuming that’s the query you wish to target)

    add_action( 'loop_start', 'wpse107113_loop_start' );
    function wpse107113_loop_start( $query ){
         if( $query->is_main_query() ){
    
         }
    }
    

    The last time have_posts() is called it triggers the action loop_end (source), so similar to above:

    add_action( 'loop_end', 'wpse107113_loop_end' );
    function wpse107113_loop_end( $query ){
         if( $query->is_main_query() ){
    
         }
    }
    
  2. Thank @Stephen Harris for the above answer 🙂

    Just a very important note, when using the loop start/end you need the code below to prevent unwanted trigger of your code in the head.

    if ( $query->is_main_query() ):
    
        ... code here
    
    endif;
    

Comments are closed.