View Categories

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! :-)