Link to home
Start Free TrialLog in
Avatar of Eight7Teen
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.
<?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');
?>

Open in new window

Avatar of raminhos
raminhos
Flag of Portugal image

Checkout the attached class.

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
Avatar of Eight7Teen
Eight7Teen

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_LANGUAGE"];

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'>";
?>

Open in new window

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?
ASKER CERTIFIED SOLUTION
Avatar of bogesman
bogesman

Link to home
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
Start Free Trial
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!