Redirect mobile devices to alternate version of my site
You could use a device description database (such as WURFL) which will recognise the client device from the request headers. You can then query that database to decide if the device can handle your site (e.g. support javascript, or is the screen big enough) before deciding whether to redirect them to a different site.
You don't mention your environment, but WURFL supplies APIs for Java and PHP, and maybe others as well. If there's no supplied API, you can still use WURFL, but you'll have to parse and process the XML data yourself.
How can I redirect mobile devices to a different URL?
See this existing question.
You will have better luck doing this server side, as many mobile browsers don't even support JavaScript. Basically you want to check the user agent and compare to a list of known mobile browsers.
How to redirect a single page for mobile devices?
Do I need a plugin to help with this?
Yes, we always need plugins ;)
I use Chriss Schuld's Browser Class☉ to detect this at PHP level.☉ original and a fork of mine to prevent link rot
Then, it's just a matter of using template_redirect
hook to check for our page, sniff the browser agent and redirect if that's the case:
<?php
/**
* Plugin Name: Redirect one page for mobile
* Description: Redirect to Mobile Template Page. Adjust the hardcoded values.
* Plugin URI: http://stackoverflow.com/q/19285382
* Version: 1.0
* Author: brasofilo
* License: GPLv2 or later
*/
# Download and put the file together with this plugin
# https://raw.github.com/brasofilo/Browser.php/master/lib/Browser.php
if( !class_exists( 'Browser' ) )
require_once( 'Browser.php' );
add_action( 'template_redirect', 'redirect_so_19285382' );
function redirect_so_19285382()
{
# Not our page, bail out
if( !is_page( 'about' ) ) // <------- adjust
return;
# Not mobile, bail out
if( !browser_check_so_19285382( 'mobile' ) )
return;
# It is our page, redirect dude!
wp_redirect( site_url( 'about-mobile' ) ); // <------- adjust
exit();
}
# Browswer sniff, create as many cases as you need
function browser_check_so_19285382( $what = '' )
{
$browser_check = new Browser();
$browser_info = $browser_check->getBrowser();
$browser_version = $browser_check->getVersion();
switch( $what )
{
case 'chrome':
if ( $browser_info == Browser::BROWSER_CHROME )
return true;
else
return false;
break;
case 'ie':
if ( $browser_info == Browser::BROWSER_IE )
return true;
else
return false;
break;
case 'mobile':
$check_this = array( // <------- adjust the array
Browser::BROWSER_NOKIA,
Browser::BROWSER_NOKIA_S60,
Browser::BROWSER_BLACKBERRY,
Browser::BROWSER_ANDROID,
Browser::BROWSER_IPAD,
Browser::BROWSER_IPOD,
Browser::BROWSER_IPHONE
);
if( in_array( $browser_info, $check_this ) )
return true;
else
return false;
break;
}
return false;
}
Or using detectmobilebrowsers.com's solution, we use this in the function redirect_so_19285382
:
if( is_mobile_detectmobilebrowsers_com() )
{
wp_redirect( site_url( 'about-mobile' ) ); // <------- adjust
exit();
}
And add their method:
function is_mobile_detectmobilebrowsers_com()
{
$useragent=$_SERVER['HTTP_USER_AGENT'];
return
preg_match( '/(android|bb\d+|meego).+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\.(browser|link)|vodafone|wap|windows (ce|phone)|xda|xiino/i', $useragent )
|| preg_match( '/1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\-(n|u)|c55\/|capi|ccwa|cdm\-|cell|chtm|cldc|cmd\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\-s|devi|dica|dmob|do(c|p)o|ds(12|\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\-|_)|g1 u|g560|gene|gf\-5|g\-mo|go(\.w|od)|gr(ad|un)|haie|hcit|hd\-(m|p|t)|hei\-|hi(pt|ta)|hp( i|ip)|hs\-c|ht(c(\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\-(20|go|ma)|i230|iac( |\-|\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\/)|klon|kpt |kwc\-|kyo(c|k)|le(no|xi)|lg( g|\/(k|l|u)|50|54|\-[a-w])|libw|lynx|m1\-w|m3ga|m50\/|ma(te|ui|xo)|mc(01|21|ca)|m\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\-2|po(ck|rt|se)|prox|psio|pt\-g|qa\-a|qc(07|12|21|32|60|\-[2-7]|i\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\-|oo|p\-)|sdk\/|se(c(\-|0|1)|47|mc|nd|ri)|sgh\-|shar|sie(\-|m)|sk\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\-|v\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\-|tdg\-|tel(i|m)|tim\-|t\-mo|to(pl|sh)|ts(70|m\-|m3|m5)|tx\-9|up(\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\-|your|zeto|zte\-/i', substr( $useragent,0,4 ) );
}
How redirect to mobile version of site without changing URL?
thanks all of you for commenting my question.
Now that i write my answer to my self , i found my question's answer.
Responsive design not it's answer. You have to show a mobile version of site, not responsive version of site. so using
@media()
not useful.
For this issues , You have to detect user's device in your back-end. for example in PHP you can use mobile-detect.
And you can detect your device and show it's template for that device.
Also, mobile detect have a js version. click here
I hope you find your answer here.
Detect and redirect to mobile site
This is one of the best module available online,i used the same for my website,it is supported by a major number of mobile devices,many developers has contributed to this repository,might be helpful to you,also it caters for redirection to website through mobile version
Redirection to Mobile Site
Mobile URL Redirect and Desktop URL Redirect
You can use user-agent header sent by the browser to check whether the user is mobile user or desktop user and redirect according to the returned value. You can check user-agent header using this -
var usrAgent = navigator.userAgent;
Now you know the user agent, check the returned user-agent is mobile or not and redirect accordingly -
function detectMobile()
{
if(usrAgent.match(/Mobile/i))
{
return "Mobile";
}
}
var isMobile = detectMobile();
if(isMobile)
{
window.location = "MOBILE_URL";
}
else
{
window.location = "DESKTOP_URL";
}
Alternatively,
You can use html link tag to redirect to any webpage according to user device width using this -
<link rel="alternate" media="only screen and (max-width: 640px*)" href="MOBILE_URL_TO_REDIRECT">
*Change this width according to your requirement. 640px is the ideal max width for mobile devices.
I hope this solves your problem.
Related Topics
How to Transform Each Side of a Shape Separately
Links Not Going Back a Directory
Disable Chrome Translation Bar on My Website
Force Ie9 to Emulate Ie8. Possible
How to Detect HTML5 Audio Mp3 Support
What Are The Default Values for Justify-Content & Align Content
CSS: Outline-Offset Alternative for Ie
Schema.Org/Microdata Markup for List of Recent Posts Without Providing "Author"/"Publisher"
How Organize Pagination with a Large Number of Pages in Django Project
How to Create a Curved Speech Bubble
CSS Align Images and Text on Same Line
How to Play Shoutcast Internet Radio Streams with HTML5
How to Correctly Use "Section" Tag in HTML5
Make a Parent Div Webkit-Filter Not Affect Children