I have a little non-standard WP dev environment, I use one WP core for all my projects and switch each project in core's wp-config.php just changing the $project
variable (e.g. proj1, proj2, example...). Projects and core are separated and each project has its own DB, wp-content folder, wp-config-dev.php (DB credentials and table prefix), and wp-config.php (usual wp-config that I deploy on the server).
//core's wp-config.php
<?php
$project = 'example';
define( 'WP_CONTENT_DIR', 'C:/dev/projects/'.$project.'/wp/wp-content' );
define( 'WP_CONTENT_URL', 'https://projects.folder/'.$project.'/wp/wp-content' );
include('C:/dev/projects/'.$project.'/wp/wp-config-dev.php');
if ( ! defined( 'ABSPATH' ) ) {
define( 'ABSPATH', dirname( __FILE__ ) . '/' );
}
require_once( ABSPATH . 'wp-settings.php' );
// custom functions
include('custom.php');
All my projects on the development environment have the same user and password (e.g. foo and bar) and I change them when I export DB when my project is ready to production, so my goal to switch each project just with changing $project
and not login in every time cuz it is really annoying.
When i switch beetwen projects i have always to log in again into switched project. In included custom.php
file i have wp_signon()
function that was worked on WP 4+ but since WP 5.0 it is stopped working. Earlier that approach automatically logged in each project and i even can't log out cuz it keep me logged on page reload :)
$current_user = wp_get_current_user();
if (!user_can( $current_user, 'administrator' )) {
//without if(){} i have same behaviour
$creds = array();
$creds['user_login'] = 'foo';
$creds['user_password'] = 'bar';
$creds['remember'] = false;
wp_signon( $creds, false );
}
Now after the switch, I need to update the page again to the admin bar appear and when I go to the console it redirects me to wp-login.php where is user input had filled and the password input are empty.
So how to make it always automatically logged in when I change the project and make that each session has no expiration time?
Note. I need to make it work only in the custom.php file that I include to core's wp-config, I don't need to make it in each project instance that I deploy on the server.
Update. Now autologin works fine, the problem was in second parameter of the wp_signon()
function, it should be true if you use HTTPS on your site.
//custom.php
echo "is_user_logged_in() — ";
var_dump(is_user_logged_in());
//this condition not working after switch project, have to reload page
if (!is_user_logged_in()) {
$creds = array();
$creds['user_login'] = 'foo';
$creds['user_password'] = 'bar';
$creds['remember'] = false;
$user = wp_signon( $creds, true ); //set second parameter to true to enable secure cookies
add_filter( 'auth_cookie_expiration', 'keep_me_logged_in_for_1_year' );
function keep_me_logged_in_for_1_year( $expirein ) {
return 31556926; // 1 year in seconds
}
}
It always keep me logged in for current project and I haven't problem with redirection to wp-login page but when i switch to another project I still need to reload page to login and for the admin bar to appear.
In drop down menu i switch project with changing $project
var in core's config
How to login immediately and without reloads after changing $project
? Is there a problem with that engine got another DB and wp-content folder?