PluginProbe
Polylang / 2.4
Polylang v2.4
3.8.9 3.8.8 3.8.7 3.8.6 3.8.5 3.8.4 3.8.3 2.7 2.7.0.1 2.7.1 2.7.2 2.7.3 2.7.4 2.8 2.8.1 2.8.2 2.8.3 2.8.4 2.9 2.9.1 2.9.2 3.0 3.0.1 3.0.2 3.0.3 All 233 releases
← All changes | include/query.php +51 -3 2.92.4 View file →
@@ -1,8 +1,5 @@
1 1 <?php
2 -/**
3 - * @package Polylang
4 - */
5 2
6 3 /**
7 4 * A class to manipulate the language query var in WP_Query
8 5 *
@@ -8,8 +5,32 @@
8 5 *
9 6 * @since 2.2
10 7 */
11 8 class PLL_Query {
9 +
10 + static protected $excludes = array(
11 + 'p',
12 + 'post_parent',
13 + 'attachment',
14 + 'attachment_id',
15 + 'name',
16 + 'pagename',
17 + 'page_id',
18 + 'category_name',
19 + 'tag',
20 + 'tag_id',
21 + 'cat',
22 + 'category__in',
23 + 'category__and',
24 + 'post__in',
25 + 'post_name__in',
26 + 'tag__in',
27 + 'tag__and',
28 + 'tag_slug__in',
29 + 'tag_slug__and',
30 + 'post_parent__in',
31 + );
32 +
12 33 /**
13 34 * Constructor
14 35 *
15 36 * @since 2.2
@@ -107,8 +128,35 @@
107 128 public function filter_query( $lang ) {
108 129 $qvars = &$this->query->query_vars;
109 130
110 131 if ( ! isset( $qvars['lang'] ) ) {
132 + /**
133 + * Filter the query vars which disable the language filter in a query
134 + *
135 + * @since 2.3.5
136 + *
137 + * @param array $excludes Query vars excluded from the language filter
138 + * @param object $query WP Query
139 + * @param object $lang Language
140 + */
141 + $excludes = apply_filters( 'pll_filter_query_excluded_query_vars', self::$excludes, $this->query, $lang );
142 +
143 + // Do not filter the query if the language is already specified in another way
144 + foreach ( $excludes as $k ) {
145 + if ( ! empty( $qvars[ $k ] ) ) {
146 + // Specific case for 'cat' as it can contain negative values
147 + if ( 'cat' === $k ) {
148 + foreach ( explode( ',', $qvars['cat'] ) as $cat ) {
149 + if ( $cat > 0 ) {
150 + return;
151 + }
152 + }
153 + } else {
154 + return;
155 + }
156 + }
157 + }
158 +
111 159 $taxonomies = array_intersect( $this->model->get_translated_taxonomies(), get_taxonomies( array( '_builtin' => false ) ) );
112 160
113 161 foreach ( $taxonomies as $tax ) {
114 162 $tax = get_taxonomy( $tax );