Eight7Teen
asked on
Using IP address to determine language of welcome message upon login?
I'm currently using wordpress on my site, and I have the "Sidebar Login" plugin activated so that users can login without having to navigate away from the actual site into the "wp-admin" area.
I have figured out a way to display "random" welcome messages to users when they login. These messages range from slang terms in english, to all kinds of different "hellos" in other languages. What I would LIKE to do is to somehow determine what country a user is visiting from by sniffing the IP address, then using that information to display a welcome message which corresponds to their native language.
Is this possible?
Keep in mind that I have absolutely no idea as to how to "sniff" an IP address, nor would I have any clue as to how to determine which country that particular IP is coming from.
I've included the entire sidebar-login plugin php file so that you can get an idea as to what the code looks like.
I have figured out a way to display "random" welcome messages to users when they login. These messages range from slang terms in english, to all kinds of different "hellos" in other languages. What I would LIKE to do is to somehow determine what country a user is visiting from by sniffing the IP address, then using that information to display a welcome message which corresponds to their native language.
Is this possible?
Keep in mind that I have absolutely no idea as to how to "sniff" an IP address, nor would I have any clue as to how to determine which country that particular IP is coming from.
I've included the entire sidebar-login plugin php file so that you can get an idea as to what the code looks like.
<?php
/*
Plugin Name: Sidebar Login
Plugin URI: http://wordpress.org/extend/plugins/sidebar-login/
Description: Adds a sidebar widget to let users login
Version: 2.1.2
Author: Mike Jolley
Author URI: http://blue-anvil.com
*/
function sidebarlogin() {
$args["before_widget"]="";
$args["after_widget"]="";
$args["before_title"]="<h2 class=\"lightgray\">";
$args["before_name"]="<span class=\"lightblue\">";
$args["after_name"]="</span>";
$args["after_title"]="</h2>";
widget_sidebarlogin($args);
}
function widget_sidebarlogin($args) {
extract($args);
global $user_ID;
if (isset($user_ID)) {
// User is logged in
//Begin random greetings when logged in
$greets[] = 'Hello ';
$greets[] = 'Welcome ';
$greets[] = 'Howdy ';
$greets[] = 'Bonjour ';
$greets[] = 'Bueno ';
$greets[] = 'Salut ';
$greets[] = 'mArHAbAn ';
$greets[] = 'Salam ';
$greets[] = 'Konnichi Wa ';
$greets[] = 'Shwmae ';
$greets[] = 'Pryvit ';
$greets[] = 'Guten Tag ';
$greets[] = 'Your name is ';
$greets[] = 'Howdy doo ';
$greets[] = 'Ello ello ello ';
srand ((double) microtime() * 1000000);
$random_number = rand(0,count($greets)-1);
//End random greetings when logged in
$user_info = get_userdata($user_ID);
echo $before_widget . $before_title . __($greets[$random_number]) . $before_name . $user_info->user_login . $after_name . __("!") . $after_title;
echo '<ul class="pagenav">
<li class="page_item"><a href="'.get_bloginfo('wpurl').'/wp-admin/">'.__('Dashboard').'</a></li>
<li class="page_item"><a href="'.get_bloginfo('wpurl').'/wp-admin/profile.php">'.__('Your Profile').'</a></li>
<li class="page_item"><a href="'.current_url('logout').'">'.__('Logout?').'</a></li>
</ul>';
} else {
// User is NOT logged in!!!
echo $before_widget . $before_title . __("Please Login...") . $after_title;
// Show any errors
global $myerrors;
$wp_error = new WP_Error();
if ( !empty($myerrors) ) {
$wp_error = $myerrors;
}
if ( $wp_error->get_error_code() ) {
$errors = '';
$messages = '';
foreach ( $wp_error->get_error_codes() as $code ) {
$severity = $wp_error->get_error_data($code);
foreach ( $wp_error->get_error_messages($code) as $error ) {
if ( 'message' == $severity )
$messages .= ' ' . $error . "<br />\n";
else
$errors .= ' ' . $error . "<br />\n";
}
}
if ( !empty($errors) )
echo '<div id="login_error">' . apply_filters('login_errors', $errors) . "</div>\n";
if ( !empty($messages) )
echo '<p class="message">' . apply_filters('login_messages', $messages) . "</p>\n";
}
// login form
echo '<form action="'.current_url().'" method="post" class="space25">';
?>
<p class="spacingfix"><label for="user_login"><?php _e('Username:') ?><br/><input name="log" value="<?php echo attribute_escape(stripslashes($_POST['log'])); ?>" class="sidelog" id="user_login" type="text" /></label></p>
<p class="spacingfix"><label for="user_pass"><?php _e('Password:') ?><br/><input name="pwd" class="sidelog" id="user_pass" type="password" /></label></p>
<p class="spacingfix"><label for="rememberme"><input name="rememberme" class="checkbox" id="rememberme" value="forever" type="checkbox" /> <?php _e('Remember me'); ?></label></p>
<p class="submit"><input type="submit" name="wp-submit" id="wp-submit" value=" <?php _e('Do It!'); ?> " /><span class="omega left25"><input type="reset" name="wp-clear" id="wp-clear" value=" <?php _e('Fix It!'); ?> " /></span>
<input type="hidden" name="sidebarlogin_posted" value="1" />
<input type="hidden" name="testcookie" value="1" /></p>
</form>
<?php
// Output other links
echo '<ul class="sidebarlogin_otherlinks">';
if (get_option('users_can_register')) {
// MU FIX
global $wpmu_version;
if (empty($wpmu_version)) {
?>
<?php
} else {
?>
<?php
}
}
?>
<li class="spacingfix"><a href="<?php bloginfo('wpurl'); ?>/wp-login.php?action=lostpassword" title="<?php _e('Please visit the Password Lost & Found to claim your password') ?>"><?php _e('Forget your password?') ?></a></li>
<li class="spacingfix"><a href="<?php bloginfo('wpurl'); ?>/wp-signup.php"><?php _e('Register?') ?></a></li>
</ul>
<?php
}
// echo widget closing tag
echo $after_widget;
}
function widget_sidebarlogin_init() {
if ( !function_exists('register_sidebar_widget') ) return;
// Register widget for use
register_sidebar_widget(array('Sidebar Login', 'widgets'), 'widget_sidebarlogin');
}
function widget_sidebarlogin_check() {
if ($_POST['sidebarlogin_posted'] || $_GET['logout']) {
// Includes
//include_once('wp-settings.php');
global $myerrors;
$myerrors = new WP_Error();
//Set a cookie now to see if they are supported by the browser.
setcookie(TEST_COOKIE, 'WP Cookie check', 0, COOKIEPATH, COOKIE_DOMAIN);
if ( SITECOOKIEPATH != COOKIEPATH )
setcookie(TEST_COOKIE, 'WP Cookie check', 0, SITECOOKIEPATH, COOKIE_DOMAIN);
// Logout
if ($_GET['logout']==true) {
nocache_headers();
wp_logout();
wp_redirect(current_url('nologout'));
exit();
}
// Are we doing a sidebar login action?
if ($_POST['sidebarlogin_posted']) {
if ( is_ssl() && force_ssl_login() && !force_ssl_admin() && ( 0 !== strpos($redirect_to, 'https') ) && ( 0 === strpos($redirect_to, 'http') ) )
$secure_cookie = false;
else
$secure_cookie = '';
$user = wp_signon('', $secure_cookie);
// Error Handling
if ( is_wp_error($user) ) {
$errors = $user;
// If cookies are disabled we can't log in even with a valid user+pass
if ( isset($_POST['testcookie']) && empty($_COOKIE[TEST_COOKIE]) )
$errors->add('test_cookie', __("<strong class=\"errtext\">ERROR:</strong> Cookies are blocked or not supported by your browser. You must <a href='http://www.google.com/cookies.html'>enable cookies</a> to use WordPress."));
if ( empty($_POST['log']) && empty($_POST['pwd']) ) {
$errors->add('empty_username', __('<div class="err"><strong class="errbold">ERROR:</strong> Please enter your username.</div>'));
$errors->add('empty_password', __('<div class="err"><strong class="errbold">ERROR:</strong> Please enter your password.</div>'));
}
$myerrors = $errors;
} else {
wp_redirect(current_url('nologout'));
exit;
}
}
}
}
if ( !function_exists('current_url') ) :
function current_url($url = '') {
$pageURL = 'http';
if ($_SERVER["HTTPS"] == "on") $pageURL .= "s";
$pageURL .= "://";
if ($_SERVER["SERVER_PORT"] != "80") {
$pageURL .= $_SERVER["SERVER_NAME"].":".$_SERVER["SERVER_PORT"].$_SERVER["REQUEST_URI"];
} else {
$pageURL .= $_SERVER["SERVER_NAME"].$_SERVER["REQUEST_URI"];
}
if ($url == "logout" && strstr($pageURL,'logout')==false) {
if (strstr($pageURL,'?')) {
$pageURL .='&logout=true';
} else {
$pageURL .='?logout=true';
}
}
if ($url == "nologout" && strstr($pageURL,'logout')==true) {
$pageURL = str_replace('?logout=true','',$pageURL);
$pageURL = str_replace('&logout=true','',$pageURL);
}
//added by mick
if (!strstr(get_bloginfo('wpurl'),'www.')) $pageURL = str_replace('www.','', $pageURL );
//
return $pageURL;
}
endif;
// Run code and init
add_action('init', 'widget_sidebarlogin_check',1);
add_action('widgets_init', 'widget_sidebarlogin_init');
?>
ASKER
Thanks for the reply, but that particular script requires the user to select their country from a list of possibilities generated from their IP address. I need something which will either explicitly define the country with corresponding welcome message, or at least use a "fall back" for each particular group of possibilities rather than needing user input.
I'm sorry to disapoint you my friend, but i just put the script work.. you didn't look at him at proper way..
Check example.php:
where is $ip = xxxxxxx....replace with: $ip = $_SERVER["REMOTE_ADDR"];
you can even use: $_SERVER["HTTP_ACCEPT_LANG UAGE"];
PS: Read the zip: READ_ME.txt
Check example.php:
where is $ip = xxxxxxx....replace with: $ip = $_SERVER["REMOTE_ADDR"];
you can even use: $_SERVER["HTTP_ACCEPT_LANG
PS: Read the zip: READ_ME.txt
<?php
require_once('CountryFromIP.inc.php');
//$ip ='XXX.XXX.XXX.XXX'; // THIS IP IS FOR TEST...
// YOU CAN DO THIS:
$ip = $_SERVER["REMOTE_ADDR"];
$object = new CountryFromIP();
$countryName = $object->GetCountryName($ip);
$flagPath = $object->ReturnFlagPath();
echo "<BR> <B>Country: </B>".$countryName;
echo "<BR> <B>Flag: </B> <img src=".$flagPath." border='0'>";
?>
ASKER
I'm a PRE-noobie when it comes to php, so I'm sorry I didn't catch that.
I am assuming that if I were to want to display a greeting based on the country rather than the country name and a flag, I would need to use "if" statements to match up each language's greeting with the corresponding country?
I am assuming that if I were to want to display a greeting based on the country rather than the country name and a flag, I would need to use "if" statements to match up each language's greeting with the corresponding country?
ASKER CERTIFIED SOLUTION
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
ASKER
Thank you so much for giving me an example even I could understand. I really appreciate it. That seems fairly complex, but I think I understand the general concept behind it. Thanks again!
Not mine, didn't change the zip autor's file..
From http://www.phpclasses.org
There are two files name *.php.txt .. just rename it to *.php
countryfromip-2005-06-22.zip