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/rewrite.php +127 -15 2.02.4 View file →
@@ -2,23 +2,19 @@
2 2
3 3 add_action( 'init', 'bogo_add_rewrite_tags' );
4 4
5 5 function bogo_add_rewrite_tags() {
6 - $langs = array_keys( bogo_available_languages() );
7 - $langs = array_map( 'bogo_lang_slug', $langs );
8 - $langs = array_filter( $langs );
6 + $regex = bogo_get_lang_regex();
9 7
10 - if ( empty( $langs ) )
8 + if ( empty( $regex ) )
11 9 return;
12 10
13 - $lang_rewrite_regex = '(' . implode( '|', $langs ) . ')';
11 + add_rewrite_tag( '%lang%', $regex, 'lang=' );
14 12
15 - add_rewrite_tag( '%lang%', $lang_rewrite_regex, 'lang=' );
16 -
17 13 $old_regex = bogo_get_prop( 'lang_rewrite_regex' );
18 14
19 - if ( $lang_rewrite_regex != $old_regex ) {
20 - bogo_set_prop( 'lang_rewrite_regex', $lang_rewrite_regex );
15 + if ( $regex != $old_regex ) {
16 + bogo_set_prop( 'lang_rewrite_regex', $regex );
21 17 flush_rewrite_rules();
22 18 }
23 19 }
24 20
@@ -41,15 +37,25 @@
41 37 global $wp_rewrite;
42 38
43 39 $permastruct = $wp_rewrite->permalink_structure;
44 40
45 - if ( ! apache_mod_loaded( 'mod_rewrite', true ) && ! iis7_supports_permalinks() )
46 - $permastruct = preg_replace( '#^/index\.php#', '/index.php/%lang%', $permastruct );
47 - elseif ( is_multisite() && ! is_subdomain_install() && is_main_site() )
48 - $permastruct = preg_replace( '#^/blog#', '/%lang%/blog', $permastruct );
49 - else
50 - $permastruct = preg_replace( '#^/#', '/%lang%/', $permastruct );
41 + // from wp-admin/includes/misc.php
42 + $got_rewrite = apply_filters( 'got_rewrite',
43 + apache_mod_loaded( 'mod_rewrite', true ) );
44 + $got_url_rewrite = apply_filters( 'got_url_rewrite',
45 + $got_rewrite || $GLOBALS['is_nginx'] || iis7_supports_permalinks() );
51 46
47 + if ( ! $got_url_rewrite ) {
48 + $permastruct = preg_replace(
49 + '#^/index\.php#', '/index.php/%lang%', $permastruct );
50 + } elseif ( is_multisite() && ! is_subdomain_install() && is_main_site() ) {
51 + $permastruct = preg_replace(
52 + '#^/blog#', '/%lang%/blog', $permastruct );
53 + } else {
54 + $permastruct = preg_replace(
55 + '#^/#', '/%lang%/', $permastruct );
56 + }
57 +
52 58 $extra = bogo_generate_rewrite_rules( $permastruct, array(
53 59 'ep_mask' => EP_PERMALINK,
54 60 'paged' => false ) );
55 61
@@ -167,8 +173,114 @@
167 173 $extra = bogo_generate_rewrite_rules( $permastruct, array(
168 174 'ep_mask' => $ep_mask ) );
169 175
170 176 return array_merge( $extra, $taxonomy_rewrite );
177 +}
178 +
179 +add_filter( 'rewrite_rules_array', 'bogo_rewrite_rules_array' );
180 +
181 +function bogo_rewrite_rules_array( $rules ) {
182 + global $wp_rewrite;
183 +
184 + $post_types = array_diff(
185 + (array) bogo_localizable_post_types(),
186 + get_post_types( array( '_builtin' => true ) ) );
187 +
188 + if ( empty( $post_types ) )
189 + return $rules;
190 +
191 + $lang_regex = bogo_get_lang_regex();
192 +
193 + foreach ( $post_types as $post_type ) {
194 + if ( ! $post_type_obj = get_post_type_object( $post_type ) )
195 + continue;
196 +
197 + if ( false === $post_type_obj->rewrite )
198 + continue;
199 +
200 + $permastruct = $wp_rewrite->get_extra_permastruct( $post_type );
201 +
202 + if ( $post_type_obj->rewrite['with_front'] ) {
203 + $permastruct = preg_replace(
204 + '#^' . $wp_rewrite->front . '#',
205 + '/%lang%' . $wp_rewrite->front,
206 + $permastruct );
207 + } else {
208 + $permastruct = preg_replace(
209 + '#^' . $wp_rewrite->root . '#',
210 + '/%lang%/' . $wp_rewrite->root,
211 + $permastruct );
212 + }
213 +
214 + $rules = array_merge(
215 + bogo_generate_rewrite_rules( $permastruct, $post_type_obj->rewrite ),
216 + $rules );
217 +
218 + if ( $post_type_obj->has_archive ) {
219 + if ( $post_type_obj->has_archive === true )
220 + $archive_slug = $post_type_obj->rewrite['slug'];
221 + else
222 + $archive_slug = $post_type_obj->has_archive;
223 +
224 + if ( $post_type_obj->rewrite['with_front'] )
225 + $archive_slug = substr( $wp_rewrite->front, 1 ) . $archive_slug;
226 + else
227 + $archive_slug = $wp_rewrite->root . $archive_slug;
228 +
229 + $extra_rules = array(
230 + "{$lang_regex}/{$archive_slug}/?$"
231 + => 'index.php?lang=$matches[1]&post_type=' . $post_type );
232 +
233 + $rules = $extra_rules + $rules;
234 +
235 + if ( $post_type_obj->rewrite['feeds'] && $wp_rewrite->feeds ) {
236 + $feeds = '(' . trim( implode( '|', $wp_rewrite->feeds ) ) . ')';
237 +
238 + $extra_rules = array(
239 + "{$lang_regex}/{$archive_slug}/feed/$feeds/?$"
240 + => 'index.php?lang=$matches[1]&post_type=' . $post_type . '&feed=$matches[2]',
241 + "{$lang_regex}/{$archive_slug}/$feeds/?$"
242 + => 'index.php?lang=$matches[1]&post_type=' . $post_type . '&feed=$matches[2]' );
243 +
244 + $rules = $extra_rules + $rules;
245 + }
246 +
247 + if ( $post_type_obj->rewrite['pages'] ) {
248 + $extra_rules = array(
249 + "{$lang_regex}/{$archive_slug}/{$wp_rewrite->pagination_base}/([0-9]{1,})/?$" => 'index.php?lang=$matches[1]&post_type=' . $post_type . '&paged=$matches[2]' );
250 +
251 + $rules = $extra_rules + $rules;
252 + }
253 + }
254 +
255 + foreach ( get_object_taxonomies( $post_type ) as $tax ) {
256 + if ( ! $tax_obj = get_taxonomy( $tax ) )
257 + continue;
258 +
259 + if ( false === $tax_obj->rewrite )
260 + continue;
261 +
262 + $permastruct = $wp_rewrite->get_extra_permastruct( $tax );
263 +
264 + if ( $tax_obj->rewrite['with_front'] ) {
265 + $permastruct = preg_replace(
266 + '#^' . $wp_rewrite->front . '#',
267 + '/%lang%' . $wp_rewrite->front,
268 + $permastruct );
269 + } else {
270 + $permastruct = preg_replace(
271 + '#^' . $wp_rewrite->root . '#',
272 + '/%lang%/' . $wp_rewrite->root,
273 + $permastruct );
274 + }
275 +
276 + $rules = array_merge(
277 + bogo_generate_rewrite_rules( $permastruct, $tax_obj->rewrite ),
278 + $rules );
279 + }
280 + }
281 +
282 + return $rules;
171 283 }
172 284
173 285 function bogo_generate_rewrite_rules( $permalink_structure, $args = '' ) {
174 286 global $wp_rewrite;