我有一个非标准的WP-dev环境,我对所有项目使用一个WP-core,并在core的WP-config中切换每个项目。php只是更改$project 变量(例如proj1、proj2、示例…)。项目和核心是分开的,每个项目都有自己的DB、wp内容文件夹、wp-config-dev.php(DB凭据和表前缀)和wp配置。php(我在服务器上部署的常用wp配置)。
//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\');
我在开发环境中的所有项目都有相同的用户和密码(例如foo和bar),当我的项目准备生产时,我在导出DB时会更改它们,因此我的目标是只需更改
$project 而且不是每次都登录,因为这真的很烦人。
当我切换beetwen项目时,我总是要再次登录到切换的项目。包括在内custom.php 我拥有的文件wp_signon() 在WP 4+上工作但自WP 5.0起停止工作的功能。之前,这种方法会自动登录每个项目,我甚至无法注销,因为它会让我一直登录页面重新加载:)
$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 );
}
现在在切换之后,我需要再次更新页面,以显示管理栏,当我转到控制台时,它会将我重定向到wp登录。php where is user input已填充,密码输入为空。

那么,当我更改项目并使每个会话都没有过期时间时,如何使其始终自动登录?
Note. 我只需要在海关工作。我将php文件包含到core的wp配置中,我不需要在服务器上部署的每个项目实例中都使用它。
<小时/>Update. 现在autologin工作正常,问题出在wp_signon() 函数,如果您在站点上使用HTTPS,则应为true。
//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
}
}
它总是让我为当前项目登录,并且我对重定向到wp登录页面没有问题,但当我切换到另一个项目时,我仍然需要重新加载页面以登录,并显示管理栏。
在下拉菜单中,我通过更改切换项目$project 核心配置中的var
如何在更改后立即登录而不重新加载$project? 引擎获得另一个DB和wp内容文件夹是否有问题?
SO网友:birgire
如果您使用的是WordPress 5.5,假设有不同的cookie域,这里有一个更温和的建议可以尝试+
对于您的开发安装,请设置环境变量WP_ENVIRONMENT_TYPE 或定义:
define( \'WP_ENVIRONMENT_TYPE\', \'development\' );
在相应的
wp-config-development.php 或者你用的名字。
然后扩展authentication cookie expiration period 对于开发,安装。
add_filter( \'auth_cookie_expiration\', function( $ttl, $user_id, $remember ) {
// Adjust to your working environment needs.
$my_working_types = [ \'development\' ];
$my_working_ttl = YEAR_IN_SECONDS;
return in_array( wp_get_environment_type(), $my_working_types, true )
? $my_working_ttl
: $ttl;
}, PHP_INT_MAX - 1, 3 );
所以你必须先登录一次,
checking “the”;“记住我”;在登录屏幕上,我们将看到会话过期。
有four 支持的环境类型wp_get_environment_type() 支持:
本地开发(默认)请参见dev notes 背景故事。
ps:设置使用同一个域,子目录中有多个站点,共享同一个WordPress安装,让我想起WordPress multisite.