PluginProbe
Bogo / 2.4
Bogo v2.4
3.9.3 trunk 1.0 1.1 2.0 2.0.1 2.1 2.1.1 2.1.2 2.1.3 2.2 2.3 2.4 2.4.1 2.4.2 2.4.3 2.5 2.6 2.6.1 2.7 2.8 2.8.1 2.9 3.0 3.0.1 All 52 releases
← All changes | includes/query.php +62 -147 trunk2.4 View file →
@@ -1,26 +1,17 @@
1 1 <?php
2 2
3 -add_action( 'parse_query', 'bogo_parse_query', 10, 1 );
3 +add_action( 'parse_query', 'bogo_parse_query' );
4 4
5 5 function bogo_parse_query( $query ) {
6 6 $qv = &$query->query_vars;
7 7
8 - if ( ! empty( $qv['bogo_suppress_locale_query'] ) ) {
8 + if ( ! empty( $qv['bogo_suppress_locale_query'] ) )
9 9 return;
10 - }
11 10
12 - if ( $query->is_preview() and ( $qv['page_id'] or $qv['p'] ) ) {
13 - $qv['bogo_suppress_locale_query'] = true;
14 - return;
15 - }
11 + if ( isset( $qv['post_type'] ) && 'any' != $qv['post_type'] ) {
12 + $localizable = array_filter( (array) $qv['post_type'], 'bogo_is_localizable_post_type' );
16 13
17 - if ( isset( $qv['post_type'] ) and 'any' !== $qv['post_type'] ) {
18 - $localizable = array_filter(
19 - (array) $qv['post_type'],
20 - 'bogo_is_localizable_post_type'
21 - );
22 -
23 14 if ( empty( $localizable ) ) {
24 15 $qv['bogo_suppress_locale_query'] = true;
25 16 return;
26 17 }
@@ -25,25 +16,23 @@
25 16 return;
26 17 }
27 18 }
28 19
29 - $lang = $qv['lang'] ?? '';
20 + $lang = isset( $qv['lang'] ) ? $qv['lang'] : '';
30 21
31 22 if ( is_admin() ) {
32 23 $locale = $lang;
33 24 } else {
34 - if ( $lang ) {
25 + if ( $lang )
35 26 $locale = bogo_get_closest_locale( $lang );
36 - } else {
27 + else
37 28 $locale = get_locale();
38 - }
39 29
40 - if ( empty( $locale ) ) {
30 + if ( empty( $locale ) )
41 31 $locale = bogo_get_default_locale();
42 - }
43 32 }
44 33
45 - if ( empty( $locale ) or ! bogo_is_available_locale( $locale ) ) {
34 + if ( empty( $locale ) || ! bogo_is_available_locale( $locale ) ) {
46 35 $qv['bogo_suppress_locale_query'] = true;
47 36 return;
48 37 }
49 38
@@ -48,25 +37,19 @@
48 37 }
49 38
50 39 $qv['lang'] = $locale;
51 40
52 - if ( is_admin() ) {
41 + if ( is_admin() )
53 42 return;
54 - }
55 43
56 - if (
57 - $query->is_home and
58 - 'page' === get_option( 'show_on_front' ) and
59 - get_option( 'page_on_front' )
60 - ) {
44 + if ( $query->is_home && 'page' == get_option( 'show_on_front' ) && get_option( 'page_on_front' ) ) {
61 45 $query_keys = array_keys( wp_parse_args( $query->query ) );
62 - $query_keys = array_diff(
63 - $query_keys,
64 - array( 'preview', 'page', 'paged', 'cpage', 'lang' )
65 - );
46 + $query_keys = array_diff( $query_keys,
47 + array( 'preview', 'page', 'paged', 'cpage', 'lang' ) );
66 48
67 49 if ( empty( $query_keys ) ) {
68 50 $query->is_page = true;
51 + $query->is_singular = true;
69 52 $query->is_home = false;
70 53 $qv['page_id'] = get_option( 'page_on_front' );
71 54
72 55 if ( ! empty( $qv['paged'] ) ) {
@@ -78,59 +61,23 @@
78 61
79 62 if ( '' != $qv['pagename'] ) {
80 63 $query->queried_object = bogo_get_page_by_path( $qv['pagename'], $locale );
81 64
82 - if ( ! empty( $query->queried_object ) ) {
65 + if ( ! empty( $query->queried_object ) )
83 66 $query->queried_object_id = (int) $query->queried_object->ID;
84 - } else {
67 + else
85 68 unset( $query->queried_object );
86 - unset( $query->queried_object_id );
87 - }
88 69
89 - if (
90 - 'page' === get_option( 'show_on_front' ) and
91 - isset( $query->queried_object_id ) and
92 - $query->queried_object_id == get_option( 'page_for_posts' )
93 - ) {
70 + if ( 'page' == get_option( 'show_on_front' )
71 + && isset( $query->queried_object_id )
72 + && $query->queried_object_id == get_option( 'page_for_posts' ) ) {
94 73 $query->is_page = false;
95 74 $query->is_home = true;
96 75 $query->is_posts_page = true;
97 76 }
98 77 }
99 -
100 - if (
101 - isset( $qv['post_type'] ) and
102 - 'any' !== $qv['post_type'] and
103 - ! is_array( $qv['post_type'] ) and
104 - ! empty( $qv['name'] )
105 - ) {
106 - $query->queried_object = bogo_get_page_by_path(
107 - $qv['name'], $locale, $qv['post_type']
108 - );
109 -
110 - if ( ! empty( $query->queried_object ) ) {
111 - $query->queried_object_id = (int) $query->queried_object->ID;
112 - } else {
113 - unset( $query->queried_object );
114 - unset( $query->queried_object_id );
115 - }
116 - }
117 -
118 - if (
119 - $query->is_posts_page and
120 - ( ! isset( $qv['withcomments'] ) or ! $qv['withcomments'] )
121 - ) {
122 - $query->is_comment_feed = false;
123 - }
124 -
125 - $query->is_singular =
126 - ( $query->is_single || $query->is_page || $query->is_attachment );
127 -
128 - $query->is_embed =
129 - $query->is_embed && ( $query->is_singular || $query->is_404 );
130 78 }
131 79
132 -
133 80 add_filter( 'posts_join', 'bogo_posts_join', 10, 2 );
134 81
135 82 function bogo_posts_join( $join, $query ) {
136 83 global $wpdb;
@@ -136,21 +83,18 @@
136 83 global $wpdb;
137 84
138 85 $qv = &$query->query_vars;
139 86
140 - if ( ! empty( $qv['bogo_suppress_locale_query'] ) ) {
87 + if ( ! empty( $qv['bogo_suppress_locale_query'] ) )
141 88 return $join;
142 - }
143 89
144 - $locale = $qv['lang'] ?? '';
90 + $locale = empty( $qv['lang'] ) ? '' : $qv['lang'];
145 91
146 - if ( ! bogo_is_available_locale( $locale ) ) {
92 + if ( ! bogo_is_available_locale( $locale ) )
147 93 return $join;
148 - }
149 94
150 - if ( ! $meta_table = _get_meta_table( 'post' ) ) {
95 + if ( ! $meta_table = _get_meta_table( 'post' ) )
151 96 return $join;
152 - }
153 97
154 98 $join .= " LEFT JOIN $meta_table AS postmeta_bogo ON ($wpdb->posts.ID = postmeta_bogo.post_id AND postmeta_bogo.meta_key = '_locale')";
155 99
156 100 return $join;
@@ -155,9 +99,8 @@
155 99
156 100 return $join;
157 101 }
158 102
159 -
160 103 add_filter( 'posts_where', 'bogo_posts_where', 10, 2 );
161 104
162 105 function bogo_posts_where( $where, $query ) {
163 106 global $wpdb;
@@ -163,29 +106,25 @@
163 106 global $wpdb;
164 107
165 108 $qv = &$query->query_vars;
166 109
167 - if ( ! empty( $qv['bogo_suppress_locale_query'] ) ) {
110 + if ( ! empty( $qv['bogo_suppress_locale_query'] ) )
168 111 return $where;
169 - }
170 112
171 - $locale = $qv['lang'] ?? '';
113 + $locale = empty( $qv['lang'] ) ? '' : $qv['lang'];
172 114
173 - if ( ! bogo_is_available_locale( $locale ) ) {
115 + if ( ! bogo_is_available_locale( $locale ) )
174 116 return $where;
175 - }
176 117
177 - if ( ! $meta_table = _get_meta_table( 'post' ) ) {
118 + if ( ! $meta_table = _get_meta_table( 'post' ) )
178 119 return $where;
179 - }
180 120
181 121 $where .= " AND (1=0";
182 122
183 123 $where .= $wpdb->prepare( " OR postmeta_bogo.meta_value LIKE %s", $locale );
184 124
185 - if ( bogo_is_default_locale( $locale ) ) {
125 + if ( bogo_is_default_locale( $locale ) )
186 126 $where .= " OR postmeta_bogo.meta_id IS NULL";
187 - }
188 127
189 128 $where .= ")";
190 129
191 130 return $where;
@@ -190,96 +129,72 @@
190 129
191 130 return $where;
192 131 }
193 132
133 +add_filter( 'option_sticky_posts', 'bogo_option_sticky_posts' );
194 134
195 -add_filter( 'option_sticky_posts', 'bogo_option_sticky_posts', 10, 1 );
135 +function bogo_option_sticky_posts( $posts ) {
136 + if ( is_admin() )
137 + return $posts;
196 138
197 -function bogo_option_sticky_posts( $posts ) {
198 - if ( is_home() ) {
199 - $locale = get_locale();
139 + $locale = get_locale();
200 140
201 - $posts = array_filter( $posts,
202 - static function ( $post_id ) use ( $locale ) {
203 - return bogo_get_post_locale( $post_id ) === $locale;
204 - }
205 - );
141 + foreach ( $posts as $key => $post_id ) {
142 + if ( $locale != bogo_get_post_locale( $post_id ) )
143 + unset( $posts[$key] );
206 144 }
207 145
208 146 return $posts;
209 147 }
210 148
149 +add_filter( 'option_page_on_front', 'bogo_get_local_post' );
150 +add_filter( 'option_page_for_posts', 'bogo_get_local_post' );
211 151
212 -add_filter( 'option_page_on_front', 'bogo_get_local_post', 10, 1 );
213 -add_filter( 'option_page_for_posts', 'bogo_get_local_post', 10, 1 );
214 -
215 152 function bogo_get_local_post( $post_id ) {
216 153 global $wpdb;
217 154
218 - if ( is_admin() or empty( $post_id ) ) {
155 + if ( is_admin() || empty( $post_id ) ) {
219 156 return $post_id;
220 157 }
221 158
222 159 $post_type = get_post_type( $post_id );
223 160
224 - if (
225 - ! post_type_exists( $post_type ) or
226 - ! bogo_is_localizable_post_type( $post_type )
227 - ) {
161 + if ( ! post_type_exists( $post_type )
162 + || ! bogo_is_localizable_post_type( $post_type ) ) {
228 163 return $post_id;
229 164 }
230 165
231 166 $locale = get_locale();
232 167
233 - if ( bogo_get_post_locale( $post_id ) === $locale ) {
168 + if ( bogo_get_post_locale( $post_id ) == $locale ) {
234 169 return $post_id;
235 170 }
236 171
237 - $locale_query = $wpdb->prepare(
238 - "pm2.meta_value LIKE %s",
239 - $locale
240 - );
172 + $original = get_post_meta( $post_id, '_original_post', true );
241 173
242 - if ( bogo_is_default_locale( $locale ) ) {
243 - $locale_query = $wpdb->prepare(
244 - "(pm2.meta_value LIKE %s OR pm2.meta_id IS NULL)",
245 - $locale
246 - );
174 + if ( empty( $original ) ) {
175 + $original = $post_id;
247 176 }
248 177
249 - $original_post = get_post_meta( $post_id, '_original_post', true );
178 + $q = "SELECT ID FROM $wpdb->posts AS posts";
179 + $q .= " LEFT JOIN $wpdb->postmeta AS pm1";
180 + $q .= " ON posts.ID = pm1.post_id AND pm1.meta_key = '_original_post'";
181 + $q .= " LEFT JOIN $wpdb->postmeta AS pm2";
182 + $q .= " ON posts.ID = pm2.post_id AND pm2.meta_key = '_locale'";
183 + $q .= " WHERE 1=1";
184 + $q .= $wpdb->prepare( " AND post_type = %s", $post_type );
185 + $q .= $wpdb->prepare( " AND (ID = %d OR pm1.meta_value = %d)",
186 + $original, $original );
187 + $q .= " AND (1=0";
188 + $q .= $wpdb->prepare( " OR pm2.meta_value LIKE %s", $locale );
189 + $q .= bogo_is_default_locale( $locale ) ? " OR pm2.meta_id IS NULL" : "";
190 + $q .= ")";
250 191
251 - // For back-compat
252 - if ( empty( $original_post ) ) {
253 - $original_post = $post_id;
254 - }
192 + $translation = absint( $wpdb->get_var( $q ) );
255 193
256 - $original_post_query = $wpdb->prepare(
257 - "pm1.meta_value = %s",
258 - $original_post
259 - );
260 -
261 - // For back-compat
262 - if ( is_int( $original_post ) ) {
263 - $original_post_query = $wpdb->prepare(
264 - "(ID = %d OR pm1.meta_value = %d)",
265 - $original_post,
266 - $original_post
267 - );
268 - }
269 -
270 - $translation = $wpdb->get_var( $wpdb->prepare(
271 - "SELECT ID FROM %i AS posts LEFT JOIN %i AS pm1 ON posts.ID = pm1.post_id AND pm1.meta_key = '_original_post' LEFT JOIN %i AS pm2 ON posts.ID = pm2.post_id AND pm2.meta_key = '_locale' WHERE post_status = 'publish' AND post_type = %s AND $locale_query AND $original_post_query",
272 - $wpdb->posts,
273 - $wpdb->postmeta,
274 - $wpdb->postmeta,
275 - $post_type,
276 - ) );
277 -
278 - $translation = absint( $translation );
279 -
280 - if ( $translation ) {
194 + if ( $translation )
281 195 return $translation;
282 - }
283 196
284 197 return $post_id;
285 198 }
199 +
200 +?>