2010-12-02 3 views
0

JoomlaとWordPressの間で片方向のシングルサインオンを行うJoomlaプラグインがあります。WordPressのログインとリンクをJoomlaに転送

これは、登録とログインがJoomlaで処理され、誰かがJoomlaに登録するたびにユーザーのデータをWordPressのユーザーテーブルに複製し、誰かがJoomlaにログインするとWordPressのCookieにログインしたユーザーのステータスを書き込みます。ユーザーは自動的にWordPressにログインします。

ただし、これはWordPressの場合には当てはまりません。誰かがWordPressにログインしたり、WordPressに登録したりすると、これらの操作は実行されません。

私はログインと登録活動のためにユーザーをWordpressからJoomlaのページに誘導したいと思っています。

例:

今、私は、ユーザーがデフォルトのメタウィジェットでのログインリンクをクリックしたときにユーザーが登録をクリックしたときには、同様にそれをJoomlaのページ上にユーザーを取るとしなければならないことをしたい
Joomla login page: http://www.xyz.com/index.php?option=com_user&view=login&Itemid=204 

Joomla registration page: http://www.xyz.com/index.php?option=com_user&view=login&Itemid=205 

ユーザーは上記の登録ページに移動する必要があります。

私は、コアファイルをハックしないで解決策を探しています。 を探している方が良い解決策があればお気軽にお問い合わせください。

私は Atom themeを使用して、それが組み込まれているログインフォームウィジェット、およびそのウィジェットのコードがある

:注意してください

それは、詳細を要求するので、プログラミングに来るとき、私は初心者です応答。

/** 
* Login widget 
* based on the "Login with AJAX" plugin - http://netweblogic.com/wordpress/plugins/login-with-ajax 
* 
* @since 1.0 
* @todo add Register Form 
*/ 
class atom_widget_login extends WP_Widget{ 

    function atom_widget_login(){ 
    $widget_ops = array('description' => __("Login and Lost Password forms", ATOM)); 
    $control_ops = array('width' => 500); 
    $this->WP_Widget(false, __("Login", ATOM), $widget_ops, $control_ops); 
    add_action('init', array(&$this, 'ajax'), 99); 

    // include in jQuery(document).ready() 
    add_action('atom_jquery_init', array(&$this, 'js')); 
    } 

    function js(){ 
    // We need to process all instances because this function gets to run only once. 
    $widget_settings = get_option($this->option_name); 

    foreach((array)$widget_settings as $instance => $options): 

     // Identify instance 
     $id = $this->id_base.'-'.$instance; 
     $block_id = 'instance-'.$id; 

     if (is_active_widget(false, $id, $this->id_base)): ?> 

     $('#<?php echo $id; ?>_login').submit(function(event){ 

     // Stop event 
     event.preventDefault(); 

     $status = $("#<?php echo $block_id; ?> .status"); 
     $status.removeClass("error").addClass("loading").text("<?php _e("Checking...", ATOM); ?>"); 

     // Sort out URL 
     url = $('#<?php echo $id; ?>_login').attr('action'); 
     url += (url.match(/\?/) != null) ? '&callback=?' : '?callback=?' ; 
     url += "&log="+encodeURIComponent($("#<?php echo $id; ?>_user").val()); 
     url += "&pwd="+encodeURIComponent($("#<?php echo $id; ?>_pass").val()); 
     url += "&rememberme="+encodeURIComponent($("#<?php echo $id; ?>_login_remember").val()); 
     url += "&login=login"; 

     $.getJSON(url, function(data, status){ 
      if(data.result === true || data.result === false){ 
      if(data.result === true){ 
       $status.removeClass("loading error").addClass("success").html(data.message); 
       window.location.reload(); 
      }else{ 
       $status.removeClass("loading").addClass("error").html(data.error); 

       // Assume the link in the status message points to forgot pass form. 
       $status.find("a").click(function(event){ 
       event.preventDefault(); 

       if($("#<?php echo $id; ?>_forgot").is(":visible")){ 
        var origColor = $("#<?php echo $id; ?>_forgot input.text").css("color"); 
        $("#<?php echo $id; ?>_forgot input.text").css({backgroundColor: '#ffa799', color: '#333'}).animate({backgroundColor: '#fff', color: origColor}, 1000); 
       }else{ 
        $("#<?php echo $block_id; ?> a.forgot_pass").remove(); // remove the bottom forgot pass link 
        $('#<?php echo $id; ?>_forgot').slideFade('toggle',333,'easeOutQuart'); 
       } 

       }); 
      } 
      }else{ 
      $status.removeClass("loading").html("<?php _e("Unkown error. Please try again...", ATOM); ?>"); 
      } 
     }); 
     }); 

     $('#<?php echo $id; ?>_forgot').submit(function(event){ 

     // Stop event 
     event.preventDefault(); 

     $status = $("#<?php echo $block_id; ?> .status"); 
     $status.removeClass("error").addClass("loading").text("<?php _e("Checking...", ATOM); ?>"); 

     // Sort out URL 
     url = $('#<?php echo $id; ?>_forgot').attr('action'); 
     url += (url.match(/\?/) != null) ? '&callback=?' : '?callback=?' ; 
     url += "&user_login="+$("#<?php echo $id; ?>_user_or_email").val(); 
     url += "&login=forgot_pass"; 

     $.getJSON(url, function(data, status){ 
      if(data.result === true || data.result === false){ 
      if(data.result == '1') $status.removeClass("loading error").addClass("success").html(data.message); 
      else $status.removeClass("loading").addClass("error").html(data.error); 
      }else{ 
      $status.removeClass("loading").addClass("error").html("<?php _e("Unkown error. Please try again...", ATOM); ?>"); 
      } 
     }); 
     }); 

     $("#<?php echo $block_id; ?> a.forgot_pass").click(function(event){ 
     event.preventDefault(); 
     $(this).remove(); 
     $('#<?php echo $id; ?>_forgot').slideFade('toggle',333,'easeOutQuart'); 
     }); 

     <?php endif; 
    endforeach; 
    } 

    function ajax(){ 

    if(isset($_GET["login"])): 
     switch($_GET["login"]): 
     case 'login': 
      $_POST['log'] = $_GET['log']; 
      $_POST['pwd'] = $_GET['pwd']; 
      $_POST['rememberme'] = $_GET['rememberme']; 

      global $current_user; 
      $return = array(); //What we send back 
      $loginResult = wp_signon(); 

      if(strtolower(get_class($loginResult)) == 'wp_user'): 
      //User login successful 
      $current_user = $loginResult; 
      /* @var $loginResult WP_User */ 
      $return['result'] = true; 
      $return['message'] = __("Login Successful, redirecting...", ATOM); 

      elseif(strtolower(get_class($loginResult)) == 'wp_error'): 
      //User login failed 
      /* @var $loginResult WP_Error */ 
      $return['result'] = false; 
      $error = $loginResult->get_error_message(); 
      $return['error'] = ($error ? $error : __("Please type a username and password", ATOM)); 

      else: 
      //Undefined Error 
      $return['result'] = false; 
      $return['error'] = __('Unknown error. Sorry...', ATOM); 

      endif; 
      $return = json_encode($return); 
     break; 

     case 'forgot_pass': 
      $_POST['user_login'] = $_GET['user_login']; 

      // Reads ajax login creds via POSt, calls the login script and interprets the result 
      $remember = array(); //What we send back 
      $result = retrieve_password(); 

      if($result === true): 
      //Password correctly remembered 
      $remember['result'] = true; 
      $remember['message'] = __("E-mail has been sent, check your inbox.", ATOM); 
      elseif(strtolower(get_class($result)) == 'wp_error'): 
      //Something went wrong 
      /* @var $result WP_Error */ 
      $remember['result'] = false; 
      $remember['error'] = $result->get_error_message(); 
      else: 
      //Undefined Error 
      $remember['result'] = false; 
      $remember['error'] = __('Unknown error. Sorry...', ATOM); 
      endif; 

      $return = json_encode($remember); 
     break; 

     default: 
      $return = json_encode(array('result' => 0, 'error' => __('Requested command is invalid', ATOM))); 
     break; 
     endswitch; 
     if(isset($_GET['callback'])) $return = $_GET['callback']."($return)"; 
     echo $return; 
     exit(); 
    endif; 
    } 

    function widget($args, $instance){ 
    extract($args); 
    $title = apply_filters('widget_title', $instance['title'], $instance, $this->id_base); 

    // Retrieve information about the current user. 
    global $current_user, $user_level; 
    get_currentuserinfo(); 

    if(is_user_logged_in()) $title = sprintf(__('Welcome %s', ATOM), $current_user->display_name); 
    echo $before_widget.($title ? $before_title.$title.$after_title : null); 

    echo '<div class="box login-block clear-block">'; 

    // the user is logged in, display the menu links 
    if(is_user_logged_in()): 
     echo '<div class="avatar">'.atom_get_avatar($current_user->user_email, 96, '', $current_user->display_name).'</div>'; 
     echo '<ul class="menu">'; 

     if($instance['dashboard']) echo '<li class="first"><a class="fadeThis" href="'.admin_url().'">'.__('Dashboard', ATOM).'</a></li>'; 

     if($user_level >= 1): // need permissions 
     if($instance['write']) echo '<li><a class="fadeThis" href="'.admin_url('post-new.php').'">'.__('Write', ATOM).'</a></li>'; 
     if($instance['comments']) echo '<li><a class="fadeThis" href="'.admin_url('edit-comments.php').'">'.__('Comments', ATOM).'</a></li>'; 
     endif; 

     if($instance['profile']) echo '<li><a class="fadeThis" href="'.admin_url('profile.php').'">'.__('Profile', ATOM).'</a></li>'; 
     echo '<li><a class="fadeThis last" id="wp-logout" href="'.wp_logout_url(atom_get_current_page_url()).'">'.__('Log Out', ATOM).'</a></li>'; 
     echo '</ul>'; 

    // The user is not logged in, display the login form 
    else: ?> 

     <div class="status clear-block"><?php echo $instance['text']; ?></div> 

     <form id="<?php echo $this->id; ?>_login" action="<?php echo site_url('wp-login.php', 'login_post') ?>" method="post"> 

     <div> 
      <input type="text" rel="<?php echo __("User", ATOM); ?>" name="log" id="<?php echo $this->id; ?>_user" class="text clearField" value="" /> 
      <input type="password" rel="<?php echo __("Password", ATOM); ?>" name="pwd" id="<?php echo $this->id; ?>_pass" class="text clearField" value="" /> 
     </div> 

     <div class="clear-block"> 
      <input type="submit" name="wp-submit" class="alignleft" value="<?php _e('Log In', ATOM); ?>" tabindex="100" /> 

      <input type="hidden" name="redirect_to" value="<?php echo atom_get_current_page_url(); ?>" /> 
      <input type="hidden" name="testcookie" value="1" /> 
      <input type="hidden" name="login" value="login" /> 

      <label for="<?php echo $this->id; ?>_login_remember" class="remember alignleft"> 
      <input name="rememberme" type="checkbox" id="<?php echo $this->id; ?>_login_remember" value="forever" /> 
      <?php _e('Remember me', ATOM); ?> 
      </label> 
     </div> 
     </form> 

     <form id="<?php echo $this->id; ?>_forgot" action="<?php echo site_url('wp-login.php?action=lostpassword', 'login_post') ?>" method="post" class="hidden"> 
     <div> 
      <input type="text" name="user_login" size="20" id="<?php echo $this->id; ?>_user_or_email" class="text wide clearField" value="<?php _e("Enter username or email", ATOM); ?>" /> 
      <input type="submit" value="<?php echo __("Get new password", ATOM); ?>" /> 
      <input type="hidden" name="login" value="forgot_pass" /> 
     </div> 
     </form> 

     <?php 
     echo '<a class="forgot_pass" href="'.site_url('wp-login.php?action=lostpassword', 'login').'">'.__('Lost your password?', ATOM).'</a>'; 

     if (get_option('users_can_register')): 
     if(function_exists('bp_get_signup_page')) $register_link = bp_get_signup_page(); // bp 
     elseif(file_exists(ABSPATH."/wp-signup.php")) $register_link = site_url('wp-signup.php', 'login'); //MU + WP3 
     else $register_link = site_url('wp-login.php?action=register', 'login'); 
     echo '<a class="register" href="'.$register_link.'">'.__('Register', ATOM).'</a>'; 
     endif; 

    endif; 

    echo '</div>'; 
echo $after_widget; 
    } 

    function update($new_instance, $old_instance){ 
    $instance['title'] = esc_attr($new_instance['title']); 
    if (current_user_can('unfiltered_html')) $instance['text'] = $new_instance['text']; 
    else $instance['text'] = stripslashes(wp_filter_post_kses(addslashes($new_instance['text']))); // wp_filter_post_kses() expects slashed 
    $instance['dashboard'] = isset($new_instance['dashboard']); 
    $instance['profile'] = isset($new_instance['profile']); 
    $instance['write'] = isset($new_instance['write']); 
    $instance['comments'] = isset($new_instance['comments']); 
    return $instance; 
    } 

    function form($instance){ 
    $instance = wp_parse_args((array)$instance, apply_filters('atom_widget_login_defaults', array(
     'title' => __('Log in', ATOM), 
     'text' => __("Hello Guest. Login below if you have a account", ATOM), 
     'dashboard' => 1, 
     'profile' => 1, 
     'write' => 1, 
     'comments' => 0))); 
    ?> 

    <p> 
     <label for="<?php echo $this->get_field_name('title'); ?>"><?php _e('Title:', ATOM); ?> 
     <input class="widefat" id="<?php echo $this->get_field_id('title'); ?>" name="<?php echo $this->get_field_name('title'); ?>" type="text" value="<?php if (isset($instance['title'])) echo esc_attr($instance['title']); ?>" /></label> 
    </p> 

    <p> 
     <label for="<?php echo $this->get_field_name('text'); ?>"><?php _e('Initial Status Text (or HTML):', ATOM); ?> 
     <textarea class="widefat code" id="<?php echo $this->get_field_id('text'); ?>" name="<?php echo $this->get_field_name('text'); ?>" rows="6" cols="28"><?php if (isset($instance['text'])) echo format_to_edit($instance['text']); ?></textarea> 
     </label> 
    </p> 

    <p><strong><em><?php _e("Welcome screen links (if enough permissions):", ATOM); ?></em></strong></p> 
    <p> 
    <label for="<?php echo $this->get_field_id('dashboard'); ?>"> 
     <input id="<?php echo $this->get_field_id('dashboard'); ?>" name="<?php echo $this->get_field_name('dashboard'); ?>" type="checkbox" value="1" <?php checked(isset($instance['dashboard']) ? $instance['dashboard'] : 0); ?> /> 
     <?php _e('Dashboard', ATOM); ?> 
    </label> 
    <br /> 

    <label for="<?php echo $this->get_field_id('profile'); ?>"> 
     <input id="<?php echo $this->get_field_id('profile'); ?>" name="<?php echo $this->get_field_name('profile'); ?>" type="checkbox" value="1" <?php checked(isset($instance['profile']) ? $instance['profile'] : 0); ?> /> 
     <?php _e('Profile', ATOM); ?> 
    </label> 
    <br /> 

    <label for="<?php echo $this->get_field_id('write'); ?>"> 
     <input id="<?php echo $this->get_field_id('write'); ?>" name="<?php echo $this->get_field_name('write'); ?>" type="checkbox" value="1" <?php checked(isset($instance['write']) ? $instance['write'] : 0); ?> /> 
     <?php _e('Write', ATOM); ?> 
    </label> 
    <br /> 

    <label for="<?php echo $this->get_field_id('comments'); ?>"> 
     <input id="<?php echo $this->get_field_id('comments'); ?>" name="<?php echo $this->get_field_name('comments'); ?>" type="checkbox" value="1" <?php checked(isset($instance['comments']) ? $instance['comments'] : 0); ?> /> 
     <?php _e('Comments', ATOM); ?> 
    </label> 
    <br /> 

    <label> 
     <input disabled="disabled" type="checkbox" value="1" checked="checked" /> 
     <?php _e('Log out', ATOM); ?> 
    </label> 
    </p> 
    <?php 
    } 
} 

答えて

1

$register_link = site_url('wp-login.php?action=register', 'login'); 

を置き換えるのログインにして登録するリンクのために、この

<form id="<?php echo $this->id; ?>_login" action="<?php echo site_url('wp-login.php', 'login_post') ?>" method="post"> 

<form id="<?php echo $this->id; ?>_login" action="<?php echo 'http://www.xyz.com/index.php?option=com_user&view=login&Itemid=204' ?>" method="post"> 

とを交換してください

$register_link = 'http://www.xyz.com/index.php?option=com_user&view=login&Itemid=205'; 

P.S - 自分は返信用にそれを

+0

ちょっとバディ感謝をしようとしませんでした。登録リンクがうまく行き渡っていますが、ログインが機能していません。ログインは送信ボタンなのでこれはログインフォームウィジェットで、ユーザー名とパスワードを入力してログインボタンをクリックする必要があります。 Joomlaのログインフォームをここにコピーして貼り付けてください。親切にお勧めします。 –

+0

あなたはウェルコムです:) ..編集されました。今すぐやってみて下さい。乾杯! –

+0

ありがとうございました。 –