function bogo_is_localizable_post_type($post_type) { return !empty($post_type) && in_array($post_type, bogo_localizable_post_types()); }
function bogo_rewrite_rules_array($rules) { global $wp_rewrite; $post_types = array_diff((array) bogo_localizable_post_types(), get_post_types(array('_builtin' => true))); if (empty($post_types)) { return $rules; } $lang_regex = bogo_get_lang_regex(); foreach ($post_types as $post_type) { if (!($post_type_obj = get_post_type_object($post_type))) { continue; } if (false === $post_type_obj->rewrite) { continue; } $permastruct = $wp_rewrite->get_extra_permastruct($post_type); if ($post_type_obj->rewrite['with_front']) { $permastruct = preg_replace('#^' . $wp_rewrite->front . '#', '/%lang%' . $wp_rewrite->front, $permastruct); } else { $permastruct = preg_replace('#^' . $wp_rewrite->root . '#', '/%lang%/' . $wp_rewrite->root, $permastruct); } $rules = array_merge(bogo_generate_rewrite_rules($permastruct, $post_type_obj->rewrite), $rules); if ($post_type_obj->has_archive) { if ($post_type_obj->has_archive === true) { $archive_slug = $post_type_obj->rewrite['slug']; } else { $archive_slug = $post_type_obj->has_archive; } if ($post_type_obj->rewrite['with_front']) { $archive_slug = substr($wp_rewrite->front, 1) . $archive_slug; } else { $archive_slug = $wp_rewrite->root . $archive_slug; } $extra_rules = array("{$lang_regex}/{$archive_slug}/?\$" => 'index.php?lang=$matches[1]&post_type=' . $post_type); $rules = $extra_rules + $rules; if ($post_type_obj->rewrite['feeds'] && $wp_rewrite->feeds) { $feeds = '(' . trim(implode('|', $wp_rewrite->feeds)) . ')'; $extra_rules = array("{$lang_regex}/{$archive_slug}/feed/{$feeds}/?\$" => 'index.php?lang=$matches[1]&post_type=' . $post_type . '&feed=$matches[2]', "{$lang_regex}/{$archive_slug}/{$feeds}/?\$" => 'index.php?lang=$matches[1]&post_type=' . $post_type . '&feed=$matches[2]'); $rules = $extra_rules + $rules; } if ($post_type_obj->rewrite['pages']) { $extra_rules = array("{$lang_regex}/{$archive_slug}/{$wp_rewrite->pagination_base}/([0-9]{1,})/?\$" => 'index.php?lang=$matches[1]&post_type=' . $post_type . '&paged=$matches[2]'); $rules = $extra_rules + $rules; } } foreach (get_object_taxonomies($post_type) as $tax) { if (!($tax_obj = get_taxonomy($tax))) { continue; } if (false === $tax_obj->rewrite) { continue; } $permastruct = $wp_rewrite->get_extra_permastruct($tax); if ($tax_obj->rewrite['with_front']) { $permastruct = preg_replace('#^' . $wp_rewrite->front . '#', '/%lang%' . $wp_rewrite->front, $permastruct); } else { $permastruct = preg_replace('#^' . $wp_rewrite->root . '#', '/%lang%/' . $wp_rewrite->root, $permastruct); } $rules = array_merge(bogo_generate_rewrite_rules($permastruct, $tax_obj->rewrite), $rules); } } return $rules; }