---
title: wpda_construct_where_clause
description: "WP Data Access version 3 allows you to add your own search logic through a filter named **wpda_construct_where_clause**. The search logic provided through this filter is used in all tools. To allow developers to add search logic for specific tables…"
url: "https://docs.legacy.wpdataaccess.com/docs/wpda_construct_where_clause/"
updated: "2025-11-26"
category: "Legacy Tools / Code / Hooks & Filters / Filters"
---

# wpda_construct_where_clause

WP Data Access version 3 allows you to add your own search logic through a filter named **wpda_construct_where_clause**. The search logic provided through this filter is used in all tools. To allow developers to add search logic for specific tables or columns only, the filter allows to return a null value to indicate that the plugin should continue with its own default search logic.

### Example search on text columns

```
function my_search_logic( $where, $schema_name, $table_name, $columns, $search ) {
	global $wpdb;
	$where_columns = [];
	foreach ( $columns as $column ) {
		if ( 'string' === WPDA::get_type( $column['data_type'] ) ) {
			$where_columns[] = $wpdb->prepare(
				"`{$column['column_name']}` like '%s'", '%' . esc_attr( $search ) . '%'
			); // WPCS: unprepared SQL OK.
		}
	}
	if ( 0 === count( $where_columns ) ) {
		return ' (1=2) ';
	}
	return ' (' . implode( ' or ', $where_columns ) . ') ';
}
add_filter('wpda_construct_where_clause','my_search_logic',10,5);
```

### Example search on specific table

```
function my_search_logic( $where, $schema_name, $table_name, $columns, $search ) {
	if ( 'my_schema' === $schema_name && 'my_table' === $table_name ) {
		// You table specific logic goes here...
		return $my_where_clause;
	} else {
		return null; // Use default plugin search logic for all other tables
	}
}
add_filter('wpda_construct_where_clause','my_search_logic',10,5);
```

   Check if parameter $where already has a value and ADD your own logic if it has. DO NOT OVERWRITE! On parent-child pages you might lose the connection between parent and child tables.

## Parameters

  **$columns**

Associative array containing the following column info taken from the data dictionary:
$columns['column_name'] => information_schema.tables.column_name
$columns['data_type'] => information_schema.tables.data_type
$columns['extra'] => information_schema.tables.extra
$columns['column_type' => information_schema.tables.column_type
$columns['is_nullable' => information_schema.tables.is_nullable
$columns['column_default'] => information_schema.tables.column_default

**$search**

Search string entered by user

**$table_name**

Table name for which the search logic is provided

**$schema_name**

Schema in which the table is stored

  Thank you Charles! :-)
