Index: /trunk/src/bp-notifications/bp-notifications-template.php
===================================================================
--- /trunk/src/bp-notifications/bp-notifications-template.php	(revision 9573)
+++ /trunk/src/bp-notifications/bp-notifications-template.php	(revision 9574)
@@ -297,4 +297,6 @@
 			'per_page'          => 25,
 			'max'               => null,
+			'meta_query'        => false,
+			'date_query'        => false
 		) );
 
@@ -325,4 +327,6 @@
 			'component_name'    => $r['component_name'],
 			'component_action'  => $r['component_action'],
+			'meta_query'        => $r['meta_query'],
+			'date_query'        => $r['date_query'],
 			'is_new'            => $this->is_new,
 			'search_terms'      => $this->search_terms,
@@ -535,4 +539,6 @@
 		'order_by'          => 'date_notified',
 		'sort_order'        => 'DESC',
+		'meta_query'        => false,
+		'date_query'        => false,
 		'page'              => 1,
 		'per_page'          => 25,
Index: /trunk/src/bp-notifications/classes/class-bp-notifications-notification.php
===================================================================
--- /trunk/src/bp-notifications/classes/class-bp-notifications-notification.php	(revision 9573)
+++ /trunk/src/bp-notifications/classes/class-bp-notifications-notification.php	(revision 9574)
@@ -283,8 +283,8 @@
 	 *
 	 * @param array $args See {@link BP_Notifications_Notification::get()}
-	 *        for more details.
+	 *                    for more details.
 	 * @return string WHERE clause.
 	 */
-	protected static function get_where_sql( $args = array() ) {
+	protected static function get_where_sql( $args = array(), $select_sql = '', $from_sql = '', $join_sql = '', $meta_query_sql = '' ) {
 		global $wpdb;
 
@@ -362,4 +362,28 @@
 			$where_conditions['search_terms'] = $wpdb->prepare( "( component_name LIKE %s OR component_action LIKE %s )", $search_terms_like, $search_terms_like );
 		}
+
+		// date query
+		if ( ! empty( $args['date_query'] ) ) {
+			$where_conditions['date_query'] = self::get_date_query_sql( $args['date_query'] );
+		}
+
+		// meta query
+		if ( ! empty( $meta_query_sql['where'] ) ) {
+			$where_conditions['meta_query'] = $meta_query_sql['where'];
+		}
+
+		/**
+		 * Filters the MySQL WHERE conditions for the Notifications items get method.
+		 *
+		 * @since BuddyPress (2.3.0)
+		 *
+		 * @param array  $where_conditions Current conditions for MySQL WHERE statement.
+		 * @param array  $args             Parsed arguments passed into method.
+		 * @param string $select_sql       Current SELECT MySQL statement at point of execution.
+		 * @param string $from_sql         Current FROM MySQL statement at point of execution.
+		 * @param string $join_sql         Current INNER JOIN MySQL statement at point of execution.
+		 * @param string $meta_query_sql   Current meta query WHERE statement at point of execution.
+		 */
+		$where_conditions = apply_filters( 'bp_notifications_get_where_conditions', $where_conditions, $args, $select_sql, $from_sql, $join_sql, $meta_query_sql );
 
 		// Custom WHERE
@@ -589,5 +613,5 @@
 
 		// Parse the arguments
-		$r  = wp_parse_args( $args, array(
+		$r = wp_parse_args( $args, array(
 			'id'                => false,
 			'user_id'           => false,
@@ -602,5 +626,15 @@
 			'page'              => false,
 			'per_page'          => false,
+			'meta_query'        => false,
+			'date_query'        => false,
+			'update_meta_cache' => true,
+			'count_total'       => false,
 		) );
+
+		// Get BuddyPress
+		$bp = buddypress();
+
+		// METADATA
+		$meta_query_sql = self::get_meta_query_sql( $r['meta_query'] );
 
 		// SELECT
@@ -608,5 +642,8 @@
 
 		// FROM
-		$from_sql   = "FROM " . buddypress()->notifications->table_name;
+		$from_sql   = "FROM {$bp->notifications->table_name} n ";
+
+		// JOIN
+		$join_sql   = $meta_query_sql['join'];
 
 		// WHERE
@@ -620,5 +657,6 @@
 			'is_new'            => $r['is_new'],
 			'search_terms'      => $r['search_terms'],
-		) );
+			'date_query'        => $r['date_query']
+		), $select_sql, $from_sql, $join_sql, $meta_query_sql );
 
 		// ORDER BY
@@ -634,5 +672,6 @@
 		) );
 
-		$sql = "{$select_sql} {$from_sql} {$where_sql} {$order_sql} {$pag_sql}";
+		// Concatenate query parts
+		$sql = "{$select_sql} {$from_sql} {$join_sql} {$where_sql} {$order_sql} {$pag_sql}";
 
 		return $wpdb->get_results( $sql );
@@ -673,4 +712,74 @@
 		// Return the queried results
 		return $wpdb->get_var( $sql );
+	}
+
+	/**
+	 * Get the SQL for the 'meta_query' param in BP_Notifications_Notification::get().
+	 *
+	 * We use WP_Meta_Query to do the heavy lifting of parsing the
+	 * meta_query array and creating the necessary SQL clauses. However,
+	 * since BP_Notifications_Notification::get() builds its SQL differently than
+	 * WP_Query, we have to alter the return value (stripping the leading
+	 * AND keyword from the 'where' clause).
+	 *
+	 * @since BuddyPress (2.3.0)
+	 *
+	 * @param  array $meta_query An array of meta_query filters. See the
+	 *                           documentation for WP_Meta_Query for details.
+	 * @return array $sql_array 'join' and 'where' clauses.
+	 */
+	public static function get_meta_query_sql( $meta_query = array() ) {
+
+		// Default array keys & empty values
+		$sql_array = array(
+			'join'  => '',
+			'where' => '',
+		);
+
+		// Bail if no meta query
+		if ( empty( $meta_query ) ) {
+			return $sql_array;
+		}
+
+		// WP_Meta_Query expects the table name at $wpdb->notificationmeta
+		$GLOBALS['wpdb']->notificationmeta = buddypress()->notifications->table_name_meta;
+
+		$n_meta_query = new WP_Meta_Query( $meta_query );
+		$meta_sql     = $n_meta_query->get_sql( 'notification', 'n', 'id' );
+
+		// Strip the leading AND - it's handled in get()
+		$sql_array['where'] = preg_replace( '/^\sAND/', '', $meta_sql['where'] );
+		$sql_array['join']  = $meta_sql['join'];
+
+		return $sql_array;
+	}
+
+	/**
+	 * Get the SQL for the 'date_query' param in BP_Notifications_Notification::get().
+	 *
+	 * We use BP_Date_Query, which extends WP_Date_Query, to do the heavy lifting
+	 * of parsing the date_query array and creating the necessary SQL clauses.
+	 * However, since BP_Notifications_Notification::get() builds its SQL
+	 * differently than WP_Query, we have to alter the return value (stripping
+	 * the leading AND keyword from the query).
+	 *
+	 * @since BuddyPress (2.3.0)
+	 *
+	 * @param array $date_query An array of date_query parameters. See the
+	 *                          documentation for the first parameter of WP_Date_Query.
+	 * @return string
+	 */
+	public static function get_date_query_sql( $date_query = array() ) {
+
+		// Bail if not a proper date query format
+		if ( empty( $date_query ) || ! is_array( $date_query ) || ! class_exists( 'BP_Date_Query' ) ) {
+			return '';
+		}
+
+		// Date query
+		$date_query = new BP_Date_Query( $date_query, 'date_recorded' );
+
+		// Strip the leading AND - it's handled in get()
+		return preg_replace( '/^\sAND/', '', $date_query->get_sql() );
 	}
 
