本文整理汇总了PHP中redirect_canonical函数的典型用法代码示例。如果您正苦于以下问题:PHP redirect_canonical函数的具体用法?PHP redirect_canonical怎么用?PHP redirect_canonical使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了redirect_canonical函数的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的PHP代码示例。
示例1: test_https_request_with_https_home
/**
* @ticket 27954
*/
public function test_https_request_with_https_home()
{
add_filter('home_url', array($this, 'set_https'));
$redirect = redirect_canonical($this->https, false);
$this->assertEquals($redirect, false);
remove_filter('home_url', array($this, 'set_https'));
}
示例2: get_canonical
function get_canonical($test_url)
{
$test_url = home_url($test_url);
$can_url = redirect_canonical($test_url, false);
if (!$can_url) {
return $test_url;
}
// No redirect will take place for this request
return $can_url;
}
示例3: restore_request_uri
/**
* When WordPress sees a url like http://foobar.com/nggallery/page/2/, it thinks that it is an
* invalid url. Therefore, we modify the request uri before WordPress parses the request, and then
* restore the request uri afterwards
*/
function restore_request_uri()
{
if (isset($_SERVER['ORIG_REQUEST_URI'])) {
$request_uri = $_SERVER['ORIG_REQUEST_URI'];
$_SERVER['UNENCODED_URL'] = $_SERVER['HTTP_X_ORIGINAL_URL'] = $_SERVER['REQUEST_URI'] = $request_uri;
} else {
wp_old_slug_redirect();
redirect_canonical();
}
}
示例4: restore_request_uri
/**
* When WordPress sees a url like http://foobar.com/nggallery/page/2/, it thinks that it is an
* invalid url. Therefore, we modify the request uri before WordPress parses the request, and then
* restore the request uri afterwards
*/
function restore_request_uri()
{
if (isset($_SERVER['ORIG_REQUEST_URI'])) {
$request_uri = $_SERVER['ORIG_REQUEST_URI'];
$_SERVER['UNENCODED_URL'] = $_SERVER['HTTP_X_ORIGINAL_URL'] = $_SERVER['REQUEST_URI'] = $request_uri;
if (isset($_SERVER['ORIG_PATH_INFO'])) {
$_SERVER['PATH_INFO'] = $_SERVER['ORIG_PATH_INFO'];
}
} else {
if (self::$_use_old_slugs) {
wp_old_slug_redirect();
}
if (self::$_use_canonical_redirect) {
redirect_canonical();
}
}
}
示例5: redirect_canonical
/**
* Redirects incoming links to the proper URL based on the site url.
*
* Search engines consider www.somedomain.com and somedomain.com to be two
* different URLs when they both go to the same location. This SEO enhancement
* prevents penality for duplicate content by redirecting all incoming links to
* one or the other.
*
* Prevents redirection for feeds, trackbacks, searches, comment popup, and
* admin URLs. Does not redirect on IIS, page/post previews, and on form data.
*
* Will also attempt to find the correct link when a user enters a URL that does
* not exist based on exact WordPress query. Will instead try to parse the URL
* or query in an attempt to figure the correct page to go to.
*
* @since 2.3.0
* @uses $wp_rewrite
* @uses $is_IIS
*
* @param string $requested_url Optional. The URL that was requested, used to
* figure if redirect is needed.
* @param bool $do_redirect Optional. Redirect to the new URL.
* @return null|false|string Null, if redirect not needed. False, if redirect
* not needed or the string of the URL
*/
function redirect_canonical($requested_url = null, $do_redirect = true)
{
global $wp_rewrite, $is_IIS, $wp_query, $wpdb;
if (is_trackback() || is_search() || is_comments_popup() || is_admin() || $is_IIS || isset($_POST) && count($_POST) || is_preview() || is_robots()) {
return;
}
if (!$requested_url) {
// build the URL in the address bar
$requested_url = is_ssl() ? 'https://' : 'http://';
$requested_url .= $_SERVER['HTTP_HOST'];
$requested_url .= $_SERVER['REQUEST_URI'];
}
$original = @parse_url($requested_url);
if (false === $original) {
return;
}
// Some PHP setups turn requests for / into /index.php in REQUEST_URI
// See: http://trac.wordpress.org/ticket/5017
// See: http://trac.wordpress.org/ticket/7173
// Disabled, for now:
// $original['path'] = preg_replace('|/index\.php$|', '/', $original['path']);
$redirect = $original;
$redirect_url = false;
// Notice fixing
if (!isset($redirect['path'])) {
$redirect['path'] = '';
}
if (!isset($redirect['query'])) {
$redirect['query'] = '';
}
if (is_singular() && 1 > $wp_query->post_count && ($id = get_query_var('p'))) {
$vars = $wpdb->get_results($wpdb->prepare("SELECT post_type, post_parent FROM {$wpdb->posts} WHERE ID = %d", $id));
if (isset($vars[0]) && ($vars = $vars[0])) {
if ('revision' == $vars->post_type && $vars->post_parent > 0) {
$id = $vars->post_parent;
}
if ($redirect_url = get_permalink($id)) {
$redirect['query'] = remove_query_arg(array('p', 'page_id', 'attachment_id', 'post_type'), $redirect['query']);
}
}
}
// These tests give us a WP-generated permalink
if (is_404()) {
// Redirect ?page_id, ?p=, ?attachment_id= to their respective url's
$id = max(get_query_var('p'), get_query_var('page_id'), get_query_var('attachment_id'));
if ($id && ($redirect_post = get_post($id))) {
$post_type_obj = get_post_type_object($redirect_post->post_type);
if ($post_type_obj->public) {
$redirect_url = get_permalink($redirect_post);
$redirect['query'] = remove_query_arg(array('p', 'page_id', 'attachment_id', 'post_type'), $redirect['query']);
}
}
if (!$redirect_url) {
$redirect_url = redirect_guess_404_permalink();
}
} elseif (is_object($wp_rewrite) && $wp_rewrite->using_permalinks()) {
// rewriting of old ?p=X, ?m=2004, ?m=200401, ?m=20040101
if (is_attachment() && !empty($_GET['attachment_id']) && !$redirect_url) {
if ($redirect_url = get_attachment_link(get_query_var('attachment_id'))) {
$redirect['query'] = remove_query_arg('attachment_id', $redirect['query']);
}
} elseif (is_single() && !empty($_GET['p']) && !$redirect_url) {
if ($redirect_url = get_permalink(get_query_var('p'))) {
$redirect['query'] = remove_query_arg(array('p', 'post_type'), $redirect['query']);
}
if (get_query_var('page')) {
$redirect_url = trailingslashit($redirect_url) . user_trailingslashit(get_query_var('page'), 'single_paged');
$redirect['query'] = remove_query_arg('page', $redirect['query']);
}
} elseif (is_single() && !empty($_GET['name']) && !$redirect_url) {
if ($redirect_url = get_permalink($wp_query->get_queried_object_id())) {
$redirect['query'] = remove_query_arg('name', $redirect['query']);
}
} elseif (is_page() && !empty($_GET['page_id']) && !$redirect_url) {
if ($redirect_url = get_permalink(get_query_var('page_id'))) {
//.........这里部分代码省略.........
示例6: redirect_canonical
/**
* Redirects incoming links to the proper URL based on the site url.
*
* Search engines consider www.somedomain.com and somedomain.com to be two
* different URLs when they both go to the same location. This SEO enhancement
* prevents penality for duplicate content by redirecting all incoming links to
* one or the other.
*
* Prevents redirection for feeds, trackbacks, searches, comment popup, and
* admin URLs. Does not redirect on IIS, page/post previews, and on form data.
*
* Will also attempt to find the correct link when a user enters a URL that does
* not exist based on exact WordPress query. Will instead try to parse the URL
* or query in an attempt to figure the correct page to go to.
*
* @since 2.3.0
* @uses $wp_rewrite
* @uses $is_IIS
*
* @param string $requested_url Optional. The URL that was requested, used to
* figure if redirect is needed.
* @param bool $do_redirect Optional. Redirect to the new URL.
* @return null|false|string Null, if redirect not needed. False, if redirect
* not needed or the string of the URL
*/
function redirect_canonical($requested_url=null, $do_redirect=true) {
global $wp_rewrite, $is_IIS, $wp_query, $wpdb;
if ( is_trackback() || is_search() || is_comments_popup() || is_admin() || $is_IIS || ( isset($_POST) && count($_POST) ) || is_preview() || is_robots() )
return;
if ( !$requested_url ) {
// build the URL in the address bar
$requested_url = ( !empty($_SERVER['HTTPS'] ) && strtolower($_SERVER['HTTPS']) == 'on' ) ? 'https://' : 'http://';
$requested_url .= $_SERVER['HTTP_HOST'];
$requested_url .= $_SERVER['REQUEST_URI'];
}
$original = @parse_url($requested_url);
if ( false === $original )
return;
// Some PHP setups turn requests for / into /index.php in REQUEST_URI
// See: http://trac.wordpress.org/ticket/5017
// See: http://trac.wordpress.org/ticket/7173
// Disabled, for now:
// $original['path'] = preg_replace('|/index\.php$|', '/', $original['path']);
$redirect = $original;
$redirect_url = false;
// Notice fixing
if ( !isset($redirect['path']) ) $redirect['path'] = '';
if ( !isset($redirect['query']) ) $redirect['query'] = '';
if ( is_singular() && 1 > $wp_query->post_count && ($id = get_query_var('p')) ) {
$vars = $wpdb->get_results( $wpdb->prepare("SELECT post_type, post_parent FROM $wpdb->posts WHERE ID = %d", $id) );
if ( isset($vars[0]) && $vars = $vars[0] ) {
if ( 'revision' == $vars->post_type && $vars->post_parent > 0 )
$id = $vars->post_parent;
if ( $redirect_url = get_permalink($id) )
$redirect['query'] = remove_query_arg(array('p', 'page_id', 'attachment_id'), $redirect['query']);
}
}
// These tests give us a WP-generated permalink
if ( is_404() ) {
$redirect_url = redirect_guess_404_permalink();
} elseif ( is_object($wp_rewrite) && $wp_rewrite->using_permalinks() ) {
// rewriting of old ?p=X, ?m=2004, ?m=200401, ?m=20040101
if ( is_single() && !empty($_GET['p']) && ! $redirect_url ) {
if ( $redirect_url = get_permalink(get_query_var('p')) )
$redirect['query'] = remove_query_arg('p', $redirect['query']);
if ( get_query_var( 'page' ) ) {
$redirect_url = trailingslashit( $redirect_url ) . user_trailingslashit( get_query_var( 'page' ), 'single_paged' );
$redirect['query'] = remove_query_arg( 'page', $redirect['query'] );
}
} elseif ( is_page() && !empty($_GET['page_id']) && ! $redirect_url ) {
if ( $redirect_url = get_permalink(get_query_var('page_id')) )
$redirect['query'] = remove_query_arg('page_id', $redirect['query']);
} elseif ( !empty($_GET['m']) && ( is_year() || is_month() || is_day() ) ) {
$m = get_query_var('m');
switch ( strlen($m) ) {
case 4: // Yearly
$redirect_url = get_year_link($m);
break;
case 6: // Monthly
$redirect_url = get_month_link( substr($m, 0, 4), substr($m, 4, 2) );
break;
case 8: // Daily
$redirect_url = get_day_link(substr($m, 0, 4), substr($m, 4, 2), substr($m, 6, 2));
break;
}
if ( $redirect_url )
$redirect['query'] = remove_query_arg('m', $redirect['query']);
// now moving on to non ?m=X year/month/day links
} elseif ( is_day() && get_query_var('year') && get_query_var('monthnum') && !empty($_GET['day']) ) {
//.........这里部分代码省略.........
示例7: check_canonical_url
public function check_canonical_url($requested_url = '', $do_redirect = true)
{
global $wp_query, $post, $is_IIS;
// don't redirect in same cases as WP
if (is_trackback() || is_search() || is_comments_popup() || is_admin() || is_preview() || is_robots() || $is_IIS && !iis7_supports_permalinks()) {
return;
}
// don't redirect mysite.com/?attachment_id= to mysite.com/en/?attachment_id=
if (1 == $this->options['force_lang'] && is_attachment() && isset($_GET['attachment_id'])) {
return;
}
// if the default language code is not hidden and the static front page url contains the page name
// the customizer lands here and the code below would redirect to the list of posts
if (isset($_POST['wp_customize'], $_POST['customized'])) {
return;
}
// don't redirect if we are on a static front page
if ($this->options['redirect_lang'] && isset($this->page_on_front) && is_page($this->page_on_front)) {
return;
}
if (empty($requested_url)) {
$requested_url = (is_ssl() ? 'https://' : 'http://') . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'];
}
if (is_single() || is_page()) {
if (isset($post->ID) && $this->model->is_translated_post_type($post->post_type)) {
$language = $this->model->get_post_language((int) $post->ID);
}
} elseif (is_category() || is_tag() || is_tax()) {
$obj = $wp_query->get_queried_object();
if ($this->model->is_translated_taxonomy($obj->taxonomy)) {
$language = $this->model->get_term_language((int) $obj->term_id);
}
} elseif ($wp_query->is_posts_page) {
$obj = $wp_query->get_queried_object();
$language = $this->model->get_post_language((int) $obj->ID);
}
if (empty($language)) {
$language = $this->curlang;
$redirect_url = $requested_url;
} else {
// first get the canonical url evaluated by WP
$redirect_url = !($redirect_url = redirect_canonical($requested_url, false)) ? $requested_url : $redirect_url;
// then get the right language code in url
$redirect_url = $this->options['force_lang'] ? $this->links_model->switch_language_in_link($redirect_url, $language) : $this->links_model->remove_language_from_link($redirect_url);
// works only for default permalinks
}
// allow plugins to change the redirection or even cancel it by setting $redirect_url to false
$redirect_url = apply_filters('pll_check_canonical_url', $redirect_url, $language);
// the language is not correctly set so let's redirect to the correct url for this object
if ($do_redirect && $redirect_url && $requested_url != $redirect_url) {
wp_redirect($redirect_url, 301);
exit;
}
return $redirect_url;
}
示例8: redirect_canonical
/**
* Redirects incoming links to the proper URL based on the site url.
*
* Search engines consider www.somedomain.com and somedomain.com to be two
* different URLs when they both go to the same location. This SEO enhancement
* prevents penalty for duplicate content by redirecting all incoming links to
* one or the other.
*
* Prevents redirection for feeds, trackbacks, searches, comment popup, and
* admin URLs. Does not redirect on non-pretty-permalink-supporting IIS 7+,
* page/post previews, WP admin, Trackbacks, robots.txt, searches, or on POST
* requests.
*
* Will also attempt to find the correct link when a user enters a URL that does
* not exist based on exact WordPress query. Will instead try to parse the URL
* or query in an attempt to figure the correct page to go to.
*
* @since 2.3.0
*
* @global WP_Rewrite $wp_rewrite
* @global bool $is_IIS
* @global WP_Query $wp_query
* @global wpdb $wpdb WordPress database abstraction object.
*
* @param string $requested_url Optional. The URL that was requested, used to
* figure if redirect is needed.
* @param bool $do_redirect Optional. Redirect to the new URL.
* @return string|void The string of the URL, if redirect needed.
*/
function redirect_canonical($requested_url = null, $do_redirect = true)
{
global $wp_rewrite, $is_IIS, $wp_query, $wpdb, $wp;
if (isset($_SERVER['REQUEST_METHOD']) && !in_array(strtoupper($_SERVER['REQUEST_METHOD']), array('GET', 'HEAD'))) {
return;
}
// If we're not in wp-admin and the post has been published and preview nonce
// is non-existent or invalid then no need for preview in query
if (is_preview() && get_query_var('p') && 'publish' == get_post_status(get_query_var('p'))) {
if (!isset($_GET['preview_id']) || !isset($_GET['preview_nonce']) || !wp_verify_nonce($_GET['preview_nonce'], 'post_preview_' . (int) $_GET['preview_id'])) {
$wp_query->is_preview = false;
}
}
if (is_trackback() || is_search() || is_comments_popup() || is_admin() || is_preview() || is_robots() || $is_IIS && !iis7_supports_permalinks()) {
return;
}
if (!$requested_url && isset($_SERVER['HTTP_HOST'])) {
// build the URL in the address bar
$requested_url = is_ssl() ? 'https://' : 'http://';
$requested_url .= $_SERVER['HTTP_HOST'];
$requested_url .= $_SERVER['REQUEST_URI'];
}
$original = @parse_url($requested_url);
if (false === $original) {
return;
}
$redirect = $original;
$redirect_url = false;
// Notice fixing
if (!isset($redirect['path'])) {
$redirect['path'] = '';
}
if (!isset($redirect['query'])) {
$redirect['query'] = '';
}
// If the original URL ended with non-breaking spaces, they were almost
// certainly inserted by accident. Let's remove them, so the reader doesn't
// see a 404 error with no obvious cause.
$redirect['path'] = preg_replace('|(%C2%A0)+$|i', '', $redirect['path']);
// It's not a preview, so remove it from URL
if (get_query_var('preview')) {
$redirect['query'] = remove_query_arg('preview', $redirect['query']);
}
if (is_feed() && ($id = get_query_var('p'))) {
if ($redirect_url = get_post_comments_feed_link($id, get_query_var('feed'))) {
$redirect['query'] = _remove_qs_args_if_not_in_url($redirect['query'], array('p', 'page_id', 'attachment_id', 'pagename', 'name', 'post_type', 'feed'), $redirect_url);
$redirect['path'] = parse_url($redirect_url, PHP_URL_PATH);
}
}
if (is_singular() && 1 > $wp_query->post_count && ($id = get_query_var('p'))) {
$vars = $wpdb->get_results($wpdb->prepare("SELECT post_type, post_parent FROM {$wpdb->posts} WHERE ID = %d", $id));
if (isset($vars[0]) && ($vars = $vars[0])) {
if ('revision' == $vars->post_type && $vars->post_parent > 0) {
$id = $vars->post_parent;
}
if ($redirect_url = get_permalink($id)) {
$redirect['query'] = _remove_qs_args_if_not_in_url($redirect['query'], array('p', 'page_id', 'attachment_id', 'pagename', 'name', 'post_type'), $redirect_url);
}
}
}
// These tests give us a WP-generated permalink
if (is_404()) {
// Redirect ?page_id, ?p=, ?attachment_id= to their respective url's
$id = max(get_query_var('p'), get_query_var('page_id'), get_query_var('attachment_id'));
if ($id && ($redirect_post = get_post($id))) {
$post_type_obj = get_post_type_object($redirect_post->post_type);
if ($post_type_obj->public) {
$redirect_url = get_permalink($redirect_post);
$redirect['query'] = _remove_qs_args_if_not_in_url($redirect['query'], array('p', 'page_id', 'attachment_id', 'pagename', 'name', 'post_type'), $redirect_url);
}
}
//.........这里部分代码省略.........
示例9: redirect_canonical
/**
* Redirects incoming links to the proper URL based on the site url.
*
* Search engines consider www.somedomain.com and somedomain.com to be two
* different URLs when they both go to the same location. This SEO enhancement
* prevents penalty for duplicate content by redirecting all incoming links to
* one or the other.
*
* Prevents redirection for feeds, trackbacks, searches, comment popup, and
* admin URLs. Does not redirect on IIS, page/post previews, and on form data.
*
* Will also attempt to find the correct link when a user enters a URL that does
* not exist based on exact WordPress query. Will instead try to parse the URL
* or query in an attempt to figure the correct page to go to.
*
* @since 2.3.0
* @uses $wp_rewrite
* @uses $is_IIS
*
* @param string $requested_url Optional. The URL that was requested, used to
* figure if redirect is needed.
* @param bool $do_redirect Optional. Redirect to the new URL.
* @return null|false|string Null, if redirect not needed. False, if redirect
* not needed or the string of the URL
*/
function redirect_canonical( $requested_url = null, $do_redirect = true ) {
global $wp_rewrite, $is_IIS, $wp_query, $wpdb;
if ( is_trackback() || is_search() || is_comments_popup() || is_admin() || !empty($_POST) || is_preview() || is_robots() || $is_IIS )
return;
if ( !$requested_url ) {
// build the URL in the address bar
$requested_url = is_ssl() ? 'https://' : 'http://';
$requested_url .= $_SERVER['HTTP_HOST'];
$requested_url .= $_SERVER['REQUEST_URI'];
}
$original = @parse_url($requested_url);
if ( false === $original )
return;
// Some PHP setups turn requests for / into /index.php in REQUEST_URI
// See: http://trac.wordpress.org/ticket/5017
// See: http://trac.wordpress.org/ticket/7173
// Disabled, for now:
// $original['path'] = preg_replace('|/index\.php$|', '/', $original['path']);
$redirect = $original;
$redirect_url = false;
// Notice fixing
if ( !isset($redirect['path']) )
$redirect['path'] = '';
if ( !isset($redirect['query']) )
$redirect['query'] = '';
if ( is_feed() && ( $id = get_query_var( 'p' ) ) ) {
if ( $redirect_url = get_post_comments_feed_link( $id, get_query_var( 'feed' ) ) ) {
$redirect['query'] = _remove_qs_args_if_not_in_url( $redirect['query'], array( 'p', 'page_id', 'attachment_id', 'pagename', 'name', 'post_type', 'feed'), $redirect_url );
$redirect['path'] = parse_url( $redirect_url, PHP_URL_PATH );
}
}
if ( is_singular() && 1 > $wp_query->post_count && ($id = get_query_var('p')) ) {
$vars = $wpdb->get_results( $wpdb->prepare("SELECT post_type, post_parent FROM $wpdb->posts WHERE ID = %d", $id) );
if ( isset($vars[0]) && $vars = $vars[0] ) {
if ( 'revision' == $vars->post_type && $vars->post_parent > 0 )
$id = $vars->post_parent;
if ( $redirect_url = get_permalink($id) )
$redirect['query'] = _remove_qs_args_if_not_in_url( $redirect['query'], array( 'p', 'page_id', 'attachment_id', 'pagename', 'name', 'post_type' ), $redirect_url );
}
}
// These tests give us a WP-generated permalink
if ( is_404() ) {
// Redirect ?page_id, ?p=, ?attachment_id= to their respective url's
$id = max( get_query_var('p'), get_query_var('page_id'), get_query_var('attachment_id') );
if ( $id && $redirect_post = get_post($id) ) {
$post_type_obj = get_post_type_object($redirect_post->post_type);
if ( $post_type_obj->public ) {
$redirect_url = get_permalink($redirect_post);
$redirect['query'] = _remove_qs_args_if_not_in_url( $redirect['query'], array( 'p', 'page_id', 'attachment_id', 'pagename', 'name', 'post_type' ), $redirect_url );
}
}
if ( ! $redirect_url ) {
if ( $redirect_url = redirect_guess_404_permalink( $requested_url ) ) {
$redirect['query'] = _remove_qs_args_if_not_in_url( $redirect['query'], array( 'page', 'feed', 'p', 'page_id', 'attachment_id', 'pagename', 'name', 'post_type' ), $redirect_url );
}
}
} elseif ( is_object($wp_rewrite) && $wp_rewrite->using_permalinks() ) {
// rewriting of old ?p=X, ?m=2004, ?m=200401, ?m=20040101
if ( is_attachment() && !empty($_GET['attachment_id']) && ! $redirect_url ) {
if ( $redirect_url = get_attachment_link(get_query_var('attachment_id')) )
//.........这里部分代码省略.........
示例10: filter_query
/**
*
*/
function filter_query()
{
if (is_comment_feed()) {
if (isset($_GET['feed'])) {
// remove possible XSS
$url = esc_url_raw(remove_query_arg('feed', 301));
wp_redirect($url);
exit;
}
set_query_var('feed', '');
// redirect_canonical will do the rest
redirect_canonical();
}
}
示例11: bogo_get_url_with_lang
function bogo_get_url_with_lang($url = null, $lang = null, $args = '')
{
$defaults = array('using_permalinks' => true);
$args = wp_parse_args($args, $defaults);
if (!$url) {
if (!($url = redirect_canonical($url, false))) {
$url = is_ssl() ? 'https://' : 'http://';
$url .= $_SERVER['HTTP_HOST'];
$url .= $_SERVER['REQUEST_URI'];
}
if ($frag = strstr($url, '#')) {
$url = substr($url, 0, -strlen($frag));
}
if ($query = @parse_url($url, PHP_URL_QUERY)) {
parse_str($query, $query_vars);
foreach (array_keys($query_vars) as $qv) {
if (!get_query_var($qv)) {
$url = remove_query_arg($qv, $url);
}
}
}
}
$default_locale = bogo_get_default_locale();
if (!$lang) {
$lang = $default_locale;
}
$home = set_url_scheme(get_option('home'));
$home = trailingslashit($home);
$url = remove_query_arg('lang', $url);
if (!$args['using_permalinks']) {
if ($lang != $default_locale) {
$url = add_query_arg(array('lang' => bogo_lang_slug($lang)), $url);
}
return $url;
}
$available_languages = array_map('bogo_lang_slug', bogo_available_locales());
$tail_slashed = '/' == substr($url, -1);
$url = preg_replace('#^' . preg_quote($home) . '((' . implode('|', $available_languages) . ')/)?#', $home . ($lang == $default_locale ? '' : bogo_lang_slug($lang) . '/'), trailingslashit($url));
if (!$tail_slashed) {
$url = untrailingslashit($url);
}
return $url;
}
示例12: hm_load_custom_templates
/**
* Load the template file of the matched rule
*
* @param string $template
* @return string
*/
function hm_load_custom_templates($template)
{
global $wp_query, $hm_rewrite_rules, $hm_current_rewrite_rule;
// Skip 404 template includes
if (is_404() && !isset($hm_current_rewrite_rule[3]['post_query_properties']['is_404'])) {
return;
}
// Allow 404's to be overridden
if (is_404() && isset($hm_current_rewrite_rule[3]['post_query_properties']['is_404']) && $hm_current_rewrite_rule[3]['post_query_properties']['is_404'] == false) {
status_header('200');
}
// Show the correct template for the query
if (isset($hm_current_rewrite_rule) && $hm_current_rewrite_rule[4] === $wp_query->query) {
// Apply some post query stuff to wp_query
if (isset($hm_current_rewrite_rule[3]['post_query_properties'])) {
// $post_query
foreach (wp_parse_args($hm_current_rewrite_rule[3]['post_query_properties']) as $property => $value) {
$wp_query->{$property} = $value;
}
}
if (!empty($hm_current_rewrite_rule[2])) {
do_action('hm_load_custom_template', $hm_current_rewrite_rule[2], $hm_current_rewrite_rule);
if (empty($hm_current_rewrite_rule[3]['disable_canonical']) && $hm_current_rewrite_rule[1]) {
redirect_canonical();
}
include $hm_current_rewrite_rule[2];
exit;
// Allow redirect_canonical to be disabled
} else {
if (!empty($hm_current_rewrite_rule[3]['disable_canonical'])) {
remove_action('template_redirect', 'redirect_canonical', 10);
}
}
}
return $template;
}
示例13: icl_redirect_canonical_wrapper
function icl_redirect_canonical_wrapper()
{
global $_icl_server_request_uri, $wp_query;
$requested_url = !empty($_SERVER['HTTPS']) && strtolower($_SERVER['HTTPS']) == 'on' ? 'https://' : 'http://';
$requested_url .= $_SERVER['HTTP_HOST'];
$requested_url .= $_icl_server_request_uri;
redirect_canonical($requested_url);
/*
if($wp_query->query_vars['error'] == '404'){
$wp_query->is_404 = true;
$template = get_404_template();
include($template);
exit;
}
*/
}
示例14: wcsp_hotfix_31_redirect_canonical
function wcsp_hotfix_31_redirect_canonical()
{
// developed by Luke America with valuable assistance by Jonas Nordström
// source code release 2011-03-23
// updated 2011-04-05 (added fixes to pagination for searches, categories, & tags)
// updated 2011-04-08 (added support for multisites that use subdirectories)
// updated 2011-04-09 (added hotfix bypass to retain XML-RPC Support)
// updated 2011-04-11 (added fixes for RSS feeds for categories & tags)
// updated 2011-05-05 (official public plugin release, 1.0.0)
global $wp_version;
// does NOT assume bug will be fixed by next version release
if (!is_admin() && $wp_version >= 3.1) {
// extract current URI
$uri = untrailingslashit($_SERVER['REQUEST_URI']);
// bypass hotfix to retain XML-RPC Support
$pos = strpos($uri, 'xmlrpc.php');
if ($pos >= 1) {
return;
}
// process hotfix for custom permalink CAT lookup
$pos = strpos($uri, 'category/');
if ($pos >= 1) {
// prep fix for CAT rss feeds
$feed = '';
if (strpos($uri, 'feed')) {
$feed = '&feed=rss2';
$uri = substr($uri, 0, strlen($uri) - 5);
}
// continue CAT hotfix
$pos = strrpos($uri, '/');
$len = strlen($uri);
$cat_slug = substr($uri, $pos + 1, $len - $pos - 1);
$cat_id_object = get_category_by_slug($cat_slug);
$cat_id = $cat_id_object->term_id;
$url = site_url('?cat=' . $cat_id . $feed);
header("Location: {$url}");
exit;
}
// process hotfix for custom permalink TAG lookup
$pos = strpos($uri, 'tag/');
if ($pos >= 1) {
// prep fix for TAG rss feeds
$feed = '';
if (strpos($uri, 'feed')) {
$feed = '&feed=rss2';
$uri = substr($uri, 0, strlen($uri) - 5);
}
// continue TAG hotfix
$pos = strrpos($uri, '/');
$len = strlen($uri);
$tag_slug = substr($uri, $pos + 1, $len - $pos - 1);
$url = site_url('?tag=' . $tag_slug . $feed);
header("Location: {$url}");
exit;
}
if (empty($_SERVER['QUERY_STRING'])) {
// handle true 404's, normal processing, etc
redirect_canonical();
// if everything works but your home page times out
// (as with the "Concentric/XO Communications shared hosting platform")
// COMMENT line #151, ie,: //redirect_canonical();
// and UNCOMMENT the next line (#158)
// $_SERVER['REQUEST_URI'] = $_SERVER['SCRIPT_NAME'];
} else {
// fix pagination for categories, tags, and searches
$page_query = wcsp_hotfix_31_get_page($uri);
if ($page_query != '') {
$url = site_url() . $_SERVER['SCRIPT_NAME'] . '?' . $_SERVER['QUERY_STRING'];
$url .= '&' . $page_query;
header("Location: {$url}");
exit;
}
}
}
}
示例15: check_canonical_url
/**
* If the language code is not in agreement with the language of the content
* redirects incoming links to the proper URL to avoid duplicate content
*
* @since 0.9.6
*
* @param string $requested_url optional
* @param bool $do_redirect optional, whether to perform the redirection or not
* @return string if redirect is not performed
*/
public function check_canonical_url($requested_url = '', $do_redirect = true)
{
global $wp_query, $post, $is_IIS;
// Don't redirect in same cases as WP
if (is_trackback() || is_search() || is_admin() || is_preview() || is_robots() || $is_IIS && !iis7_supports_permalinks()) {
return;
}
// Don't redirect mysite.com/?attachment_id= to mysite.com/en/?attachment_id=
if (1 == $this->options['force_lang'] && is_attachment() && isset($_GET['attachment_id'])) {
return;
}
// If the default language code is not hidden and the static front page url contains the page name
// the customizer lands here and the code below would redirect to the list of posts
if (isset($_POST['wp_customize'], $_POST['customized'])) {
return;
}
if (empty($requested_url)) {
$requested_url = (is_ssl() ? 'https://' : 'http://') . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'];
}
if (is_single() || is_page()) {
if (isset($post->ID) && $this->model->is_translated_post_type($post->post_type)) {
$language = $this->model->post->get_language((int) $post->ID);
}
} elseif (is_category() || is_tag() || is_tax()) {
$obj = $wp_query->get_queried_object();
if ($this->model->is_translated_taxonomy($obj->taxonomy)) {
$language = $this->model->term->get_language((int) $obj->term_id);
}
} elseif ($wp_query->is_posts_page) {
$obj = $wp_query->get_queried_object();
$language = $this->model->post->get_language((int) $obj->ID);
} elseif (is_404() && !empty($wp_query->query['page_id']) && ($id = get_query_var('page_id'))) {
// Special case for page shortlinks when using subdomains or multiple domains
// Needed because redirect_canonical doesn't accept to change the domain name
$language = $this->model->post->get_language((int) $id);
}
if (empty($language)) {
$language = $this->curlang;
$redirect_url = $requested_url;
} else {
// First get the canonical url evaluated by WP
// Workaround a WP bug wich removes the port for some urls and get it back at second call to redirect_canonical
$_redirect_url = !($_redirect_url = redirect_canonical($requested_url, false)) ? $requested_url : $_redirect_url;
$redirect_url = !($redirect_url = redirect_canonical($_redirect_url, false)) ? $_redirect_url : $redirect_url;
// Then get the right language code in url
$redirect_url = $this->options['force_lang'] ? $this->links_model->switch_language_in_link($redirect_url, $language) : $this->links_model->remove_language_from_link($redirect_url);
// Works only for default permalinks
}
/**
* Filters the canonical url detected by Polylang
*
* @since 1.6
*
* @param bool|string $redirect_url false or the url to redirect to
* @param object $language the language detected
*/
$redirect_url = apply_filters('pll_check_canonical_url', $redirect_url, $language);
// The language is not correctly set so let's redirect to the correct url for this object
if ($do_redirect && $redirect_url && $requested_url != $redirect_url) {
wp_redirect($redirect_url, 301);
exit;
}
return $redirect_url;
}