我的问题是:
if ( !class_exists( \'printSecurity\' ) ) {
class printSecurity {
public $constant_name_prefix = \'PRNSEC_\';
public function __construct() {
define( $this->constant_name_prefix .\'ROOTDIR\', plugin_dir_path(__FILE__) );
add_action(\'admin_menu\', array( $this, \'printSecurityMenu\') );
add_action( \'wp_login\', array( $this, \'last_login\'), 10, 2 );
add_shortcode(\'lastlogin\', array( $this, \'wpb_lastlogin\') );
}
public function printSecurityMenu() {
add_menu_page(\'Print security List\',
\'Print security Crud\',
\'manage_options\',
\'printSecurityMain\',
array($this, \'printSecurityMain\')
);
}
public function last_login( $user_login, $user ) {
update_user_meta( $user->ID, \'last_login\', time() );
}
public function wpb_lastlogin() {
$user = wp_get_current_user();
$last_login = get_the_author_meta(\'last_login\');
var_dump($lastlogin);
//die();
$the_login_date = date(\'M j, Y h:i:s a\', $last_login);
if ( ! empty( $_SERVER[\'HTTP_CLIENT_IP\'] ) ) {
$ip = $_SERVER[\'HTTP_CLIENT_IP\'];
} elseif ( ! empty( $_SERVER[\'HTTP_X_FORWARDED_FOR\'] ) ) {
$ip = $_SERVER[\'HTTP_X_FORWARDED_FOR\'];
} else {
$ip = $_SERVER[\'REMOTE_ADDR\'];
}
//return apply_filters( \'wpb_get_ip\', $ip );
var_dump($last_login);
$user_cool = [
\'user_login\' => $user->user_login,
\'user_id\' => $user->ID,
\'user_ip\' => $ip,
\'user_log\' => $the_login_date,
\'user_rule\' => $user->roles[0],
];
echo "<ul>";
foreach ($user_cool as $value) {
echo \'<li>\'.$value.\'</li>\';
}
echo "</ul>";
//require_once(PRNSEC_ROOTDIR . \'printSecurityMain.php\');
}
public function printSecurityMain() {
require_once(PRNSEC_ROOTDIR . \'printSecurityMain.php\');
}
}
}
global $printSecurity;
$printSecurity = new printSecurity();
这段代码只有在我使用短代码API时才起作用,但理想情况下,我希望在短代码(页面)之前启动它,只要我得到我想要显示访问和数据的管理页面。
我有几个问题:
wp\\u login有两个参数,user\\u login和$user。他们来自哪里?
如果我尝试以不同的方式调用第二个函数,例如:
add\\u menu\\u page(\'Print List\',\'Print Crud\',\'manage\\u options\',\'wpb\\u lastlogin\',array($this,\'wpb\\u lastlogin\');
和在wpb\\u lastlogin函数的末尾
require_once(ROOTDIR . \'myadmintemplate.php\');
我将避免添加短代码,它将返回:
date() expects parameter 2 to be int, string given
因为$last\\u登录将返回NULL。
last\\u login()函数是否有我不太理解的错误?
最合适的回答,由SO网友:Tom J Nowell 整理而成
您不需要存储这些信息,WordPress已经做到了这一点,它可以跨多个会话来实现这一点。
如果您在手机和PC上登录,然后转到WP Admin中的用户,您将看到他们与一个按钮一起列出,您可以在其他设备上注销。
此外,WordPress存储IP、过期时间和会话开始时间。
以下是一个简单的片段,将在用户编辑屏幕中显示此信息:
<?php
add_action( \'show_user_profile\', \'show_sessions_debug\' );
add_action( \'edit_user_profile\', \'show_sessions_debug\' );
function show_sessions_debug( $user ) { ?>
<table class="form-table">
<tr>
<th><label for="user_sessions_debug"><?php _e("Sessions"); ?></label></th>
<td>
<pre><?php var_dump( wp_get_all_sessions() ); ?></pre>
</td>
</tr>
</table>
<?php
}
