/** * Tries to transform certain queries from "by name" querying to "by ID" to overcome WordPress Core functionality * for resolving names not being filtered by language * * @param WP_Query $q * * @return WP_Query */ private function maybe_adjust_name_var($q) { if (((bool) ($name_in_q = $q->get('name')) === true || (bool) ($name_in_q = $q->get('pagename')) === true) && (bool) $q->get('page_id') === false || (bool) ($post_type = $q->get('post_type')) === true && is_scalar($post_type) && (bool) ($name_in_q = $q->get($post_type)) === true) { list($name_found, $type, $altered) = $this->query_filter->get_404_util()->guess_cpt_by_name($name_in_q, $q); if ($altered === true) { $name_before = $q->get('name'); $q->set('name', $name_found); } $type = $type ? $type : 'page'; $type = is_scalar($type) ? $type : (count($type) === 1 ? end($type) : false); $q = $type ? $this->query_filter->get_page_name_filter($type)->filter_page_name($q) : $q; if (isset($name_before)) { $q->set('name', $name_before); } } return $q; }