Help Docs Software Kadence Kadence Blocks Kadence Blocks advanced Kadence Blocks Advanced Queries Custom Queries for the Advanced Query Loop Block (Filter)

Custom Queries for the Advanced Query Loop Block (Filter)

The Advanced Query Loop block (Kadence Blocks Pro) provides settings to create a custom query loop. However, sometimes, you need to alter the query beyond the capabilities of the Advanced Query Loop’s settings. In these cases, you can add a code snippet to alter the WordPress Query object. You can add PHP code to your site using a plugin like Code Snippets or your functions.php file (in a child theme).

If you want to modify the query arguments, you can make use of the ‘kadence_blocks_pro_query_loop_query_vars‘ filter. Here is an example that implements the filter.

Examples

add_filter( 'kadence_blocks_pro_query_loop_query_vars', function( $query, $ql_query_meta, $ql_id ) {

   if ( $ql_id == 5283 ) {
      $query['tax_query'] = array(
         array(
            'taxonomy' => 'category',
            'field' => 'slug',
            'terms' => 'sub',
         )
      );
   }
   
   return $query;
}, 10, 3 );

In the above code, the $ql_id is set to 5283. This is the post ID of the specific query you want to target. If you don’t provide the conditional “if” statement to target a query ID, all of your queries will share the arguments, which isn’t ideal. Among other ways, you can find the $ql_id by navigating to Kadence Blocks > All Queries, hovering over the edit link of your desired query, and looking at the bottom left corner of your browser window. Be sure to change the ID to suit your needs.

Query Post ID

The example also uses the Simple Taxonomy Query provided by the WordPress Query documentation. Here are some additional examples that have been modified from the WordPress documentation.

Returns posts dated December 12, 2012

Source: https://developer.wordpress.org/reference/classes/wp_query/#date-parameters

add_filter( 'kadence_blocks_pro_query_loop_query_vars', function( $query, $ql_query_meta, $ql_id ) {

   if ( $ql_id == 5283 ) {


      $query['date_query'] = array(
         array(
            'year' => 2012,
            'month' => 12,
            'day' => 12,
         ),
      );
   }
   
   return $query;
}, 10, 3 );

Display posts where the custom field key is ‘color’ and the custom field value IS ‘blue’

Source: https://developer.wordpress.org/reference/classes/wp_query/#custom-field-post-meta-parameters

add_filter( 'kadence_blocks_pro_query_loop_query_vars', function( $query, $ql_query_meta, $ql_id ) {

   if ( $ql_id == 5283 ) {


      $query['meta_key'] = 'color';
      $query['meta_value'] = 'blue';
      $query['meta_compare'] = '=';
   }
   
   return $query;
}, 10, 3 );

Display posts with 25 comments or more

Source: https://developer.wordpress.org/reference/classes/wp_query/#comment-parameters.

add_filter( 'kadence_blocks_pro_query_loop_query_vars', function( $query, $ql_query_meta, $ql_id ) {

   if ( $ql_id == 5283 ) {
      $query['post_type'] = 'post';
      $query['comment_count'] = array(
         'value' => 1,
         'compare' => '>=',
      );
   }
   
   return $query;
}, 10, 3 );

Display posts that are not in a specific category

Source: https://developer.wordpress.org/reference/classes/wp_query/#category-parameters

add_filter( 'kadence_blocks_pro_query_loop_query_vars', function( $query, $ql_query_meta, $ql_id ) {

   if ( $ql_id == 5283 ) {
      $query['category__not_in'] = 5;
   }	
   
   return $query;
}, 10, 3 );

Display posts from multiple specific taxonomies and terms

Source: https://developer.wordpress.org/reference/classes/wp_query/#taxonomy-parameters

add_filter( 'kadence_blocks_pro_query_loop_query_vars', function( $query, $ql_query_meta, $ql_id ) {

   if ( $ql_id == 5283 ) {
      $query['tax_query'] = array(
         'relation' => 'AND', // Relation between taxonomies
         
         array(
            'taxonomy' => 'category',  // First taxonomy type
            'field'    => 'slug',
            'terms'    => 'a',         // Slug of the first taxonomy term
         ),

         array(
            'taxonomy' => 'category',  // Second taxonomy type
            'field'    => 'slug',
            'terms'    => 'fruit',     // Slug of the second taxonomy term
         ),
      );
   }

   return $query;
}, 10, 3 );

Display posts from author

add_filter( 'kadence_blocks_pro_query_loop_query_vars', function( $query, $ql_query_meta, $ql_id ) {

   if ( $ql_id == 5283 ) {
     // Replace 123 with the user ID you want to filter by
     $query['author'] = 123;
     // Or use author__in for multiple users:
     // $query['author__in'] = array( 123, 456 );
   }

   return $query;
}, 10, 3 );

The Advanced Query Loop block includes an option to Show Related Posts, which by default uses the standard post categories and tags to determine related content. If you’re working with a custom post type and/or a custom taxonomy, you can use the following snippet to modify the query and show related posts based on a specific taxonomy.

add_filter( 'kadence_blocks_pro_query_loop_query_vars', function( $query, $ql_query_meta, $ql_id ) {

   if ( $ql_id == 5283 ) {
      $current_post_id = get_the_ID();

      // Get the taxonomy terms of the current page
      $terms = get_the_terms( $current_post_id, 'edownload' ); //Replace 'edownload' with your taxonomy term
		
	  // Ensure the terms are valid
      if ( $terms && ! is_wp_error( $terms ) ) {
         $term_slugs = wp_list_pluck( $terms, 'slug' );

      // Return the terms in the tax_query array
         $query['tax_query'] = array(
            array(
               'taxonomy' => 'edownload',  //Replace 'edownload' with your taxonomy term
               'field'    => 'slug',
               'terms'    => $term_slugs,
            ),
         );
      }
   }

   return $query;
}, 10, 3 );

Show Only In-Stock WooCommerce Products

By default, Adv Query Loop will display all products regardless of stock status. The following will modify the query so that it only shows in-stock products.

// Show only Products that are in-stock
add_filter( 'kadence_blocks_pro_query_loop_query_vars', function( $query, $ql_query_meta, $ql_id ) {
	if ( $ql_id == 149879 ) {  // <-- change to your Query Loop ID
		$query['meta_query'] = array(
			array(
				'key'     => '_stock_status',
				'value'   => 'instock',
				'compare' => '=',
			),
		);
	}
	return $query;
}, 10, 3 );

Show Only Woocommerce Products that are on sale

// Show only Products that are on sale
add_filter( 'kadence_blocks_pro_query_loop_query_vars', function( $query, $ql_query_meta, $ql_id ) {
	if ( $ql_id == 149879 ) {  // <-- change to your Query Loop ID
	  // Get all product IDs on sale (WooCommerce core helper)
          $sale_ids = wc_get_product_ids_on_sale();

          if ( ! empty( $sale_ids ) ) {
              // Force using these IDs
              $query['post__in'] = $sale_ids;

              // Optionally, ensure it's querying products
              $query['post_type'] = 'product';
          } else {
            // If no products on sale, force an empty result
            $query['post__in'] = [0];
          }
	}
	return $query;
}, 10, 3 );

Enable Relevanssi Integration

The text search feature for Adv Query Loop uses the native WordPress search function which only considers the post title and post content values. Additional details such as custom post meta values, categories, and tags are not included so native searches will not consider these additional fields. Relevanssi replaces the native WP search functionality and gives you greater control over your search results. To learn more about Relevanssi, see their plugin page or the official website.

Adding the following code snippet will enable the Kadence Advance Query Loop to use the Relevanssi search query for a specific Advanced Query Loop block:

add_filter('kadence_blocks_pro_query_loop_query_vars', function( $query_args, $ql_query_meta, $ql_id ){

     if ( $ql_id == 5283 && function_exists( 'relevanssi_do_query' ) && isset( $query_args['s'] ) ) {
          $query_args['relevanssi'] = true;
     }

     return $query_args; 
}, 10, 3);

Was this article helpful?