使用其他操作而不是短码API来显示用户上次登录的时间

时间:2020-04-10 作者:user3833012

我的问题是:

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()函数是否有我不太理解的错误?

1 个回复
最合适的回答,由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
}

enter image description here

相关推荐

Wordpress Admin Login Issue

Hi Guys, hoping you can help with an issue I am having logging into a WP site. This is the error message I get when trying to log in as Admin:警告:在/homepages/13/dxxxxxxxxx/htdocs/SITENAME/wp-includes/user中非法的字符串偏移量“记住”。php第41行警告:无法将空字符串分配给/homepages/13