Filter the WP_Query arguments that Directorist uses to fetch listings for the search results page. Use this hook to add, remove, or modify query constraints (e.g., sort order, meta/tax queries, visibility rules).


Hook signature

apply_filters( 'atbdp_listing_search_query_argument', array $args );
  • Type: Filter

  • Fires: Just before Directorist runs WP_Query for the search results.

  • Context: Front-end search results for Directorist listings.


Parameters

$args (array)

The arguments that will be passed to WP_Query. Typical keys include:

  • post_type (string|string[]) – Listing post type (usually at_biz_dir).

  • post_status (string|string[]) – Post status (e.g., publish).

  • posts_per_page (int) – Page size.

  • paged (int) – Current page.

  • s (string) – Free-text search term (if any).

  • orderby, order (string) – Sorting.

  • meta_query (array[]) – Meta queries.

  • tax_query (array[]) – Taxonomy queries.

  • Any other standard WP_Query arguments supported by WordPress.


Return

array – The (possibly) modified $args array that Directorist will use to run WP_Query.

✅ You must return an array. If you don’t return anything, the original arguments will be used.

Usage

Add your callback in a plugin or your theme’s functions.php:

/**
* Example: force newest first and exclude password-protected listings.
*/
add_filter( 'atbdp_listing_search_query_argument', function ( $args ) {

// Ensure safe defaults
$args = is_array( $args ) ? $args : [];

// Sort newest first
$args['orderby'] = 'date';
$args['order'] = 'DESC';

// Exclude password-protected listings
$args['has_password'] = false;

return $args;
}, 10, 1 );

Examples

1) Filter by a custom meta (e.g., only approved listings)

add_filter( 'atbdp_listing_search_query_argument', function ( $args ) {
$args = is_array( $args ) ? $args : [];

$args['meta_query'] = isset( $args['meta_query'] ) && is_array( $args['meta_query'] )
? $args['meta_query']
: [];

$args['meta_query'][] = [
'key' => '_atbdp_approval_status',
'value' => 'approved',
'compare' => '='
];

return $args;
}, 10, 1 );

2) Respect a URL parameter (e.g., minimum rating)

add_filter( 'atbdp_listing_search_query_argument', function ( $args ) {
$min_rating = isset( $_GET['min_rating'] ) ? floatval( $_GET['min_rating'] ) : 0;

if ( $min_rating > 0 ) {
$args['meta_query'] = isset( $args['meta_query'] ) && is_array( $args['meta_query'] )
? $args['meta_query']
: [];

$args['meta_query'][] = [
'key' => '_atbdp_average_rating',
'value' => $min_rating,
'type' => 'NUMERIC',
'compare' => '>='
];

// Optional: order by rating when user requests it
$args['orderby'] = 'meta_value_num';
$args['meta_key'] = '_atbdp_average_rating';
$args['order'] = 'DESC';
}

return $args;
}, 10, 1 );

3) Restrict results to a taxonomy term (e.g., category “Hospitals”)

add_filter( 'atbdp_listing_search_query_argument', function ( $args ) {
$term_id = 123; // replace with your term ID

$args['tax_query'] = isset( $args['tax_query'] ) && is_array( $args['tax_query'] )
? $args['tax_query']
: [];

$args['tax_query'][] = [
'taxonomy' => 'atbdp_categories',
'field' => 'term_id',
'terms' => [ $term_id ],
'operator' => 'IN',
];

return $args;
}, 10, 1 );

4) Price range from query string (with sanitization)

add_filter( 'atbdp_listing_search_query_argument', function ( $args ) {
$min = isset( $_GET['min_price'] ) ? floatval( $_GET['min_price'] ) : null;
$max = isset( $_GET['max_price'] ) ? floatval( $_GET['max_price'] ) : null;

if ( $min !== null || $max !== null ) {
$args['meta_query'] = isset( $args['meta_query'] ) && is_array( $args['meta_query'] )
? $args['meta_query']
: [];

$range = [ 'key' => '_atbdp_price', 'type' => 'NUMERIC' ];

if ( $min !== null && $max !== null ) {
$range['value'] = [ $min, $max ];
$range['compare'] = 'BETWEEN';
} elseif ( $min !== null ) {
$range['value'] = $min;
$range['compare'] = '>=';
} else {
$range['value'] = $max;
$range['compare'] = '<=';
}

$args['meta_query'][] = $range;
}

return $args;
}, 10, 1 );

5) Exclude certain authors or posts

add_filter( 'atbdp_listing_search_query_argument', function ( $args ) {
$args['author__not_in'] = [ 5, 42 ]; // author IDs
$args['post__not_in'] = [ 101, 202 ]; // listing IDs
return $args;
}, 10, 1 );

Best practices

  • Always sanitize input if you read from $_GET (e.g., intval, floatval, sanitize_text_field).

  • Preserve existing queries: When appending to meta_query/tax_query, initialize the array if missing (see examples).

  • Return the array: Don’t echo/print. The hook relies on the returned value.

  • Performance: Keep callbacks lightweight; avoid slow DB calls inside the filter.

  • Compatibility: Use standard WP_Query arguments only—Directorist passes them through to WordPress.


Example: Full policy (approved, >3★, hospitals only, newest first)

add_filter( 'atbdp_listing_search_query_argument', function ( $args ) {
$args = is_array( $args ) ? $args : [];

// meta_query
$args['meta_query'] = isset( $args['meta_query'] ) && is_array( $args['meta_query'] )
? $args['meta_query']
: [];

$args['meta_query'][] = [
'key' => '_atbdp_approval_status',
'value' => 'approved',
'compare' => '='
];

$args['meta_query'][] = [
'key' => '_atbdp_average_rating',
'value' => 3,
'type' => 'NUMERIC',
'compare' => '>=',
];

// tax_query: category = Hospitals (term_id 123)
$args['tax_query'] = isset( $args['tax_query'] ) && is_array( $args['tax_query'] )
? $args['tax_query']
: [];

$args['tax_query'][] = [
'taxonomy' => 'atbdp_categories',
'field' => 'term_id',
'terms' => [ 123 ],
'operator' => 'IN',
];

// Order newest first
$args['orderby'] = 'date';
$args['order'] = 'DESC';

return $args;
}, 10, 1 );

Notes

  • This hook only alters arguments; it does not run the query itself.

  • Directorist may add its own constraints first; your callback runs after Directorist builds $args, so you can override or extend safely.