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_Queryfor 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 (usuallyat_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_Queryarguments 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_Queryarguments 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.