static function pre_user_query($query) { global $wpdb; $p2p_q = P2P_Query::create_from_qv($query->query_vars, 'user'); if (is_wp_error($p2p_q)) { trigger_error($p2p_q->get_error_message(), E_USER_WARNING); $query->query_where = " AND 1=0"; return; } if (null === $p2p_q) { return; } $map = array('fields' => 'query_fields', 'join' => 'query_from', 'where' => 'query_where', 'orderby' => 'query_orderby'); $clauses = array(); foreach ($map as $clause => $key) { $clauses[$clause] = $query->{$key}; } $clauses = $p2p_q->alter_clauses($clauses, "{$wpdb->users}.ID"); if (0 !== strpos($clauses['orderby'], 'ORDER BY ')) { $clauses['orderby'] = 'ORDER BY ' . $clauses['orderby']; } foreach ($map as $clause => $key) { $query->{$key} = $clauses[$clause]; } }
static function parse_query($wp_query) { $r = P2P_Query::create_from_qv($wp_query->query_vars, 'post'); if (is_wp_error($r)) { $wp_query->_p2p_error = $r; $wp_query->set('year', 2525); return; } if (null === $r) { return; } list($wp_query->_p2p_query, $wp_query->query_vars) = $r; $wp_query->is_home = false; $wp_query->is_archive = true; }
static function parse_query($wp_query) { $p2p_q = P2P_Query::create_from_qv($wp_query->query_vars, 'post'); if (is_wp_error($p2p_q)) { trigger_error($p2p_q->get_error_message(), E_USER_WARNING); $wp_query->set('year', 2525); return; } if (null === $p2p_q) { return; } $wp_query->_p2p_query = $p2p_q; $wp_query->is_home = false; $wp_query->is_archive = true; }
function test_connection_filtering() { $ctype = p2p_register_connection_type(array('name' => 'posts_to_pages', 'from' => 'post', 'to' => 'page', 'data' => array('type' => 'strong'), 'sortable' => true, 'from_query_vars' => array('post_status' => 'publish', 'connected_order' => 'asc'))); $qv = array('connected_type' => $ctype->name, 'connected_direction' => 'to', 'connected_meta' => array('foo' => 'bar'), 'connected_orderby' => 'foo', 'connected_order' => 'desc'); list($p2p_query, $qv) = P2P_Query::create_from_qv($qv, 'post'); // 'to_query_vars' should automatically be added $this->assertEquals('publish', $qv['post_status']); // users should be able to filter connections via additional connected meta $this->assertEquals($p2p_query->meta, array_merge($ctype->data, array('foo' => 'bar'))); // users should be able to specify a different order $this->assertEquals('foo', $p2p_query->orderby); $this->assertEquals('desc', $p2p_query->order); }