Iniciar sesión en dos blogs de wordpress a la vez

6 minutos de lectura

avatar de usuario
Dión

Estoy tropezando con un pequeño problema ya que actualmente estoy tratando de iniciar sesión mediante programación en dos blogs de wordpress a la vez. Tengo una página de inicio de sesión personalizada y se deben crear las sesiones para ambos blogs de wordpress. Un blog funciona bien, pero como tengo que incluir otro wp-load.php no funciona para el segundo… Mi código hasta ahora:

...
public static function blogLogin($mail, $password) {
        require __DIR__ . '/../blog/wp-load.php';

        $wpuser = get_user_by('email', $mail);
        if (!$wpuser) $wpuser = get_user_by('login', $mail);

        if (!empty($wpuser) && !empty($wpuser->ID)) {
            wp_set_auth_cookie($wpuser->ID, true);
            return true;
        } else {
            return false;
        }
}

public static function secondBlogLogin($mail, $password) {
        require __DIR__ . '/../secondblog/wp-load.php';

        $wpuser = get_user_by('email', $mail);
        if (!$wpuser) $wpuser = get_user_by('login', $mail);

        if (!empty($wpuser) && !empty($wpuser->ID)) {
            wp_set_auth_cookie($wpuser->ID, true);
            return true;
        } else {
            return false;
        }
}
...

Y está siendo llamado por:
Class::blogLogin(...); Class::secondBlogLogin(...);
Esto parece no funcionar ya que la inclusión no solo está “en un espacio aislado” dentro de la función, sino que también está disponible en el exterior. ¿Hay alguna forma de incluir una inclusión o de lograr este inicio de sesión en ambos blogs de wordpress en un script?

  • No estoy seguro de si esto es lo que quieres lograr. Echa un vistazo aquí: infinitewp.com

    – Masivuye Cokile

    20 de enero de 2017 a las 13:43

  • Esto parece ser solo para inicios de sesión de administración, estoy buscando una solución para todos los usuarios (autores y usuarios). Un formulario de inicio de sesión inicia una sesión principal + sesiones de blog 1 y blog 2.

    – Dión

    20 de enero de 2017 a las 13:47

  • ok, intente verificar aquí, tal vez pueda señalarle la dirección correcta wordpress.stackexchange.com/questions/131399/… No estoy en wp

    – Masivuye Cokile

    20 de enero de 2017 a las 13:48

  • Gracias, esto parece correcto, pero de alguna manera tampoco funciona 😕

    – Dión

    21 de enero de 2017 a las 12:24

La respuesta a continuación es para habilitar el inicio de sesión de dos palabras presionadas durante una ejecución desde una única página de inicio de sesión personalizada.

//Your form which contain custom login (email,password).

<?php
//afer submit form post login credential value into PHP code of first file.
if(isset($_POST) && isset($_POST['submit'])){       
require("path of first wordpress root directory \wp-load.php");
if ( is_user_logged_in() ) {
    $user = wp_get_current_user();
} else {
    $creds = array();
    // Use the submited information to populate the user_login & user_password
    $creds['user_login']    = $_POST['username or email'];
    $creds['user_password'] = $_POST['password'];
    $creds['remember']      = true;
    $user                   = wp_signon( $creds, false );
    if ( is_wp_error( $user ) ) {
        echo $user->get_error_message();
    } else {
        wp_set_auth_cookie( $user->ID, true );
    }
    ?>    
    <script src="http://code.jquery.com/jquery-1.11.0.min.js"></script>
    <script type="text/javascript">
    var url="url/first-blog-login.php";      
    var user="<?php echo $_POST["username or email'];?>';
    var password = '<?php echo $_POST['password'];?>';
    $.ajax({
       type: "POST",
       url: url,
       data: {
           'user':user,
           'password':password
       },
       success: function(){         
          alert("detail passed successfully.");
       }
     });       
    </script>
    <?php
}
}   

if(isset($_POST) && !empty($_POST)){
    $user =  $_POST['user'];
  $password =  $_POST['password'];
  require("path of secound wordpress root directory\wp-load.php");
  if ( is_user_logged_in() ) {
    $user = wp_get_current_user();
} else {
    $creds= array();
    // Use the submited information to populate the user_login & user_password
    $creds['user_login']    = $user;
    $creds['user_password'] = $password;
    $creds['remember']      = true;
    $user                   = wp_signon( $creds, false );
    if ( is_wp_error( $user ) ) {
        echo $user->get_error_message();
    } else {
        wp_set_auth_cookie( $user->ID, true );
    }
}
}
?>

  • Todavía no es una solución solo de PHP, también he pensado en una solicitud de AJAX, pero tiene razón, esto definitivamente funciona más cómodo ya que no tiene una redirección. Y probablemente la única manera de hacer esto correctamente. ¡Gracias por tu esfuerzo!

    – Dión

    24 de enero de 2017 a las 12:22

avatar de usuario
fresno patel

Aquí inicie sesión mediante programación en dos blogs de wordpress a la vez,

El siguiente código puede cumplir con su requisito.

Necesita dos archivos php para habilitar cookies para dos wordpress

Coloque el siguiente código en su primer archivo PHP:

por ejemplo, www/carpeta/primer-blog-login.php

//Your form which contain custom login (email,password).

<?php
//afer submit form post login credential value into PHP code of first file.
if(isset($_POST) && isset($_POST['submit'])){       
require("path of first wordpress root directory \wp-load.php");
if ( is_user_logged_in() ) {
    $user = wp_get_current_user();
} else {
    $creds = array();
    // Use the submited information to populate the user_login & user_password
    $creds['user_login']    = $_POST['username or email'];
    $creds['user_password'] = $_POST['password'];
    $creds['remember']      = true;
    $user                   = wp_signon( $creds, false );
    if ( is_wp_error( $user ) ) {
        echo $user->get_error_message();
    } else {
        wp_set_auth_cookie( $user->ID, true );
    }
    ?>
    <script>
    var url="www/folder/secound-blog-login.php";      
    document.cookie="user=<?php echo $_POST['username'];?>";
    document.cookie="password=<?php echo $_POST['password'];?>";
    window.open(url, "_blank");
    window.open('','_self').close()
    </script>
    <?php
}
}   
?>

Coloque el siguiente código en su segundo archivo PHP:

por ejemplo, www/folder/secound-blog-login.php

<?php
  $user =  $_COOKIE['user'];
  $password =  $_COOKIE['password'];
  require("path of secound wordpress root directory\wp-load.php");
  if ( is_user_logged_in() ) {
    $user = wp_get_current_user();
} else {
    $creds= array();
    // Use the submited information to populate the user_login & user_password
    $creds['user_login']    = $user;
    $creds['user_password'] = $password;
    $creds['remember']      = true;
    $user                   = wp_signon( $creds, false );
    if ( is_wp_error( $user ) ) {
        echo $user->get_error_message();
    } else {
        wp_set_auth_cookie( $user->ID, true );
    }
}
//Your further code for execution.
?>

Puede codificar / decodificar la credencial de inicio de sesión mientras envía a una nueva ventana.

¡¡¡Espero que te ayude!!!

  • Gracias por su respuesta, esto está funcionando, y es bastante similar a lo que hice como solución también (hice una redirección con un formulario de envío automático, que es un poco más seguro que almacenar la contraseña sin cifrar en una cookie) pero como mencionado anteriormente, en realidad estoy buscando una solución sin una redirección …

    – Dión

    23 de enero de 2017 a las 13:31

  • Verifique mi otra respuesta en la que he estado usando un archivo y después del primer inicio de sesión de wordpress llamo a ajax para otro inicio de sesión de wordpress durante una ejecución. Estoy publicando otra respuesta como método diferente. Espero que también lo ayude.

    – Ceniza Patel

    24 de enero de 2017 a las 6:45

¿Ha sido útil esta solución?