Soporte » Instalación – Actualizaciones » Problema para al conectar dos wordpress

  • Resuelto streamingmenntun

    (@streamingmenntun)


    Saludos a todos mi problema es el siguiente,

    Tengo dos sitios a los cuales necesitaba que ambos registros de usuarios fuera la misma, cree primero el sitio A y luego al sitio B en la misma base de datos con la diferente prefijo y seguí las indicaciones en esta entrada https://ayudawp.com/dos-blogs-wordpress-con-los-mismos-usuarios/ , a primera instancia la conexión resulto bien pero, al intentar entrar como administrador es cuando vino el problema el sitio b me arroja el mensaje de que no tengo permisos para ingresar, tanto el sitio al como el sitio b tenían el mismo usuario con contraseña como administrador, pido por favor su ayuda en este dilema.

    La página con la que necesito ayuda: [accede para ver el enlace]

Viendo 12 respuestas - de la 1 a la 12 (de un total de 12)
  • Moderador almendron

    (@almendron)

    1) ¿Qué prefijo usa el sitio A? ¿Y el B?

    2) ¿Qué dos líneas añadiste a wp-config.php?

    3) La contraseña del administrador del sitio B: ¿era la misma que la del sitio A?

    streamingmenntun

    (@streamingmenntun)

    El sitio A mantiene el prefijo wp_ el Sitio B agregue el prefijo go_

    los archivos de configuración son idénticos de hecho realiza un clon del sitio anterior y solo modifique el tema

    las lineas agregadas al archivo de configuración al segundo sitio fueron:

    $table_prefix = 'go_';

    sobre la linea

    /* That's all, stop editing! Happy blogging. */

    agregue

    define('CUSTOM_USER_TABLE', 'wp_users');
    define('CUSTOM_USER_META_TABLE', 'wp_usermeta');
    Moderador almendron

    (@almendron)

    Lo primero de todo es comprobar que puedas entrar al sitio B. Para ello, borra las dos líneas que añadiste al archivo wp-config.php y después intenta entrar al sitio B.

    streamingmenntun

    (@streamingmenntun)

    comento las lineas y efectivamente me deja ingresar sin problemas ambos usuarios administrativos son el mismo documentandome un poco mas lei que en la taba user_meta tenia que duplicar las filas (prefijo1)_capabilities y
    (prefijo1)_user_level y cambiar el prefijo1 por el prefijo2 enlos duplicados pero me continua dando el problema

    Moderador almendron

    (@almendron)

    No toques nada más que voy a comentarlo con un compañero.

    streamingmenntun

    (@streamingmenntun)

    antes de leer tu respuesta solucione ese problema de la siguiente manera cargue un pluguin en la plataforma A la cual me permitía entrar sin problemas con el siguiente codigo que encontré:

    <?php
    /*
    Plugin Name: Duplicate Caps
    Plugin URI: 
    Description: Tiny plugin to duplicate capabilities in a setup where users (and user tables) are shared across more than one install
    Author: Mikk3lRo
    Version: 0.1
    Author URI: 
    */
    $dummy = new duplicate_caps();
    class duplicate_caps {
        function __construct() {
            add_action('updated_user_meta', array($this, 'update_prefixed_caps'), 10, 2);
            add_action('added_user_meta', array($this, 'update_prefixed_caps'), 10, 2);
            add_action('deleted_user_meta', array($this, 'update_prefixed_caps'), 10, 2);
        }
        function update_prefixed_caps($mid, $object_id) {
            /**
             * Note that $object_id contains the id of the user that was
             * just changed.
             * On a site with many users it would make sense to only
             * get and set information regarding the just-changed user
             * Currently this function corrects roles for all users
             * making sure pre-existing users are duplicated, and keeping
             * the table in sync.
             */
            global $wpdb;
            //Quick and dirty - get all *capabilities rows for all users
            $sql = "SELECT * FROM {$wpdb->usermeta} WHERE <code>meta_key</code> LIKE '%capabilities'";
            $results = $wpdb->get_results($sql) or die(mysql_error());
    
            //Will hold all prefixes (always include our own)
            $prefixes = array($wpdb->prefix);
    
            //Will grab the existing role for each prefix
            $user_roles = array();
    
            //Loop our results
            foreach ($results as $result) {
                //Make sure the meta_key looks right, and grab the prefix
                if (preg_match('#^(.*)capabilities$#', $result->meta_key, $matches)) {
                    $prefix = $matches[1];
    
                    // Collect prefixes
                    $prefixes[] = $prefix;
    
                    //Note the entire row for later use
                    $user_roles[$result->user_id][$prefix] = $result;
                }
            }
    
            //Make sure we only have one of each
            $prefixes = array_unique($prefixes);
    
            //Loop through the users we found
            foreach ($user_roles as $user_id => $existing_prefixes) {
                if (!isset($existing_prefixes[$wpdb->prefix])) {
                    //User was probably just deleted - all rows are deleted by
                    //wordpress though, so no cleanup for us :)
                } else {
                    //We want all prefixes to obey us (we just created or changed
                    //the user, so we want that to affect all sites)
                    $desired_role = $existing_prefixes[$wpdb->prefix]->meta_value;
    
                    //Loop through all prefixes
                    foreach ($prefixes as $prefix) {
                        //Data to be inserted / updated
                        $cap_data = array(
                            'user_id' => $user_id,
                            'meta_key' => $prefix . 'capabilities',
                            'meta_value' => $desired_role
                        );
    
                        //If the prefix doesn't exist for this user
                        if (!in_array($prefix, array_keys($existing_prefixes))) {
                            //Actually insert it (user was probably just created)
                            $wpdb->insert($wpdb->usermeta, $cap_data, array('%d', '%s', '%s'));
                        } else if ($desired_role !== $existing_prefixes[$prefix]->meta_value) {
                            //Update it if not already correct (user was probably just edited)
                            $cap_data['umeta_id'] = $existing_prefixes[$prefix]->umeta_id;
                            $wpdb->replace($wpdb->usermeta, $cap_data, array('%d', '%s', '%s', '%d'));
                        }
                    }
                }
            }
        }
    }

    luego cree un nuevo usuarios con rol de administrador en la plataforma a y con ese me permitió entrar a la plataforma b una vez que ingrese le cambie el rol a mi usuario como administrador el cual me lo mostraba en blanco lo que quiere decir que por alguna razón no sirvió duplicar las filas en user_meta, no fue la manera mas ortodoxa pero funciono… ahora bien me sale otro problema, cuando registro un nuevo usuario en la plataforma b e intento ingresar en la plataforma a me dice que la contraseña es incorrecta, es decir me registra el usuario pero tengo que pedir cambiar contraseña alguna idea del porque puede estar pasando esto? debo aclarar que una vez resuelto el problema de no poder ingresar como administrador cargue el mismo pluguin en la plataforma b

    Moderador almendron

    (@almendron)

    Moderador almendron

    (@almendron)

    Por lo que veo, el plugin que te indique está cerrado y ya no deja descargarlo.

    ¿Lo has podido solucionar?

    Parcialmente, logre conectarlos, pero me surgió un nuevo problema las dos plataformas me descargan la misma data, es decir, los usuarios solo deberian compartir el campo de usuario y contraseña, pero hay campos adicionales en una que deberian ser diferentes pero me descarga la misma

    Moderador almendron

    (@almendron)

    En principio, se comparte cualquier dato que se encuentre almacenado en wp_users y wp_usermeta.

    ¿Cómo solucionaste lo de entrar con el mismo administrador?

    solucione ese problema de la siguiente manera cargue un pluguin en la plataforma A la cual me permitía entrar sin problemas con el siguiente codigo que encontré:

    <?php
    /*
    Plugin Name: Duplicate Caps
    Plugin URI: 
    Description: Tiny plugin to duplicate capabilities in a setup where users (and user tables) are shared across more than one install
    Author: Mikk3lRo
    Version: 0.1
    Author URI: 
    */
    $dummy = new duplicate_caps();
    class duplicate_caps {
        function __construct() {
            add_action('updated_user_meta', array($this, 'update_prefixed_caps'), 10, 2);
            add_action('added_user_meta', array($this, 'update_prefixed_caps'), 10, 2);
            add_action('deleted_user_meta', array($this, 'update_prefixed_caps'), 10, 2);
        }
        function update_prefixed_caps($mid, $object_id) {
            /**
             * Note that $object_id contains the id of the user that was
             * just changed.
             * On a site with many users it would make sense to only
             * get and set information regarding the just-changed user
             * Currently this function corrects roles for all users
             * making sure pre-existing users are duplicated, and keeping
             * the table in sync.
             */
            global $wpdb;
            //Quick and dirty - get all *capabilities rows for all users
            $sql = "SELECT * FROM {$wpdb->usermeta} WHERE <code>meta_key</code> LIKE '%capabilities'";
            $results = $wpdb->get_results($sql) or die(mysql_error());
    
            //Will hold all prefixes (always include our own)
            $prefixes = array($wpdb->prefix);
    
            //Will grab the existing role for each prefix
            $user_roles = array();
    
            //Loop our results
            foreach ($results as $result) {
                //Make sure the meta_key looks right, and grab the prefix
                if (preg_match('#^(.*)capabilities$#', $result->meta_key, $matches)) {
                    $prefix = $matches[1];
    
                    // Collect prefixes
                    $prefixes[] = $prefix;
    
                    //Note the entire row for later use
                    $user_roles[$result->user_id][$prefix] = $result;
                }
            }
    
            //Make sure we only have one of each
            $prefixes = array_unique($prefixes);
    
            //Loop through the users we found
            foreach ($user_roles as $user_id => $existing_prefixes) {
                if (!isset($existing_prefixes[$wpdb->prefix])) {
                    //User was probably just deleted - all rows are deleted by
                    //wordpress though, so no cleanup for us :)
                } else {
                    //We want all prefixes to obey us (we just created or changed
                    //the user, so we want that to affect all sites)
                    $desired_role = $existing_prefixes[$wpdb->prefix]->meta_value;
    
                    //Loop through all prefixes
                    foreach ($prefixes as $prefix) {
                        //Data to be inserted / updated
                        $cap_data = array(
                            'user_id' => $user_id,
                            'meta_key' => $prefix . 'capabilities',
                            'meta_value' => $desired_role
                        );
    
                        //If the prefix doesn't exist for this user
                        if (!in_array($prefix, array_keys($existing_prefixes))) {
                            //Actually insert it (user was probably just created)
                            $wpdb->insert($wpdb->usermeta, $cap_data, array('%d', '%s', '%s'));
                        } else if ($desired_role !== $existing_prefixes[$prefix]->meta_value) {
                            //Update it if not already correct (user was probably just edited)
                            $cap_data['umeta_id'] = $existing_prefixes[$prefix]->umeta_id;
                            $wpdb->replace($wpdb->usermeta, $cap_data, array('%d', '%s', '%s', '%d'));
                        }
                    }
                }
            }
        }
    }
    • Esta respuesta fue modificada hace 3 semanas, 5 días por Jose Luis. Razón: Etiquetar código
    Moderador almendron

    (@almendron)

    Gracias por la información.

Viendo 12 respuestas - de la 1 a la 12 (de un total de 12)
  • Debes estar registrado para responder a este debate.