워드프레스, 그누보드 연동

워드프레스, 그누보드 연동

현재 길호넷에서 워드프레스와 그누보드를 연동한 방식입니다.

사이트를 좀 더 안정화를 시킨 후 소스를 공개하려고 하였는데, 그누보드 사용자분의 요청(?)으로 급조하여 만든걸 올립니다. (http://sir.co.kr/bbs/board.php?bo_table=cm_free&wr_id=741180)

추후, 그누보드의 head.php, tail.php 에서 워드프레스에서 생성된 페이지를 직접 불러들이고, 캐쉬 처리 및 컨텐츠 영역을 상하로 나눈 후 출력하는것을 생각하고 있습니다.

  • 워드프레스 회원 DB 를 기반으로 그누보드와 연동되어, 게시판 글 작성시 워드프레스의 로그인에 따라 액션을 취합니다.
  • 그누보드를 gnu.kilho.net 로 사용하고 있습니다. 따라서 워드프레스에서 서브도메인과 쿠키를 공유할 수 있게 하여야 합니다.
    (길호넷에서는 “root Cookie” 라는 플러그인을 사용하였습니다)
  • 워드프레스와 그누보드가 각각의 서버로 운영되고 있습니다. 소스 내용 중 자신의 워드프레스가 설치된 서버IP, 워드프레스가 설치된 도메인 정보를 각각 수정하세요.
  • 워드프레스가 설치된 서버에 아래 소스를 “wp-sso.php” 로 저장합니다.
<?
	/********************************************************
	 * WordPress SSO(Single Site On) Helper Object 
	 * by Oh Kilho (http://www.kilho.net)
	 *******************************************************/

	include 'wp-load.php';
	
	$wp_cookie = $_COOKIE['wordpress_logged_in_'.md5(get_site_option('siteurl'))];
	$wp_user = $_POST['user'];
	$wp_pass = $_POST['pass'];

	if($wp_user&amp;&amp;$wp_pass)
	{
		if(user_pass_ok($wp_user, $wp_pass))
			$user = get_user_by('login', $wp_user);
	}else{
		if($wp_cookie)
		{
			wp_set_current_user(wp_validate_auth_cookie($wp_cookie, 'logged_in'));
			$user = wp_get_current_user();
		}
	}

	if($user)
	{
		echo '<id-->'.$user-&gt;user_login.'';
		echo '<nick>'.$user-&gt;display_name.'</nick>';
		echo '<email>'.$user-&gt;user_email.'</email>';
		echo '<url>'.$user-&gt;user_url.'</url>';
	}
?>

  • 그누보드가 설치된 서버의 “/extend/” 디렉토리에 아래 소스를 “wp-sso.php”로 저장합니다.
<?
/*
 그누보드 확장 모듈 : 워드프레스 SSO 처리
 */
$wp_server_domain = '워드프레스 설치된 도메인'; // xxx.com
$wp_server_addr = '워드프레스 설치된 서버 IP'; // xxx.xxx.xxx.xxx
$wp_server_path = '워드프레스 설치된 경로'; // 루트일 땐 '/' 로 작성

$wp_cookie_name = 'wordpress_logged_in_'.md5('http://'.$wp_server_domain);
$wp_cookie_value = $_COOKIE[$wp_cookie_name];

if ($_SESSION['ss_mb_id'])
{
	// 총 관리자인 경우 열외 - 그누보드를 자체적으로 살펴볼 권한을 줘야징
	if(!$wp_cookie_value&amp;&amp;$is_admin != 'super')
	{
		// 이호경님 제안 코드
		session_unset(); // 모든 세션변수를 언레지스터 시켜줌 
		session_destroy(); // 세션해제함 

		// 페이지를 재실행
		echo '<script type="text/javascript"> window.location.reload(); </script>';
		exit;
	}else{
		echo 'Connection failed';
		exit;
	}
}
?>