在用户首次登录时插入模式

时间:2019-04-04 作者:William Bay

试图为首次登录到我的多站点网络的用户创建欢迎模式。我正在使用本教程中的代码https://wp-mix.com/wordpress-first-user-login/我可以在数据库中看到用户元的更新,但是当包装在这个函数中时,模式代码不会插入。模态代码在其他情况下起作用。

我怀疑这要么与在函数中添加函数有关,要么与优先级有关。但不知道接下来该怎么办。

/**
 * Set User meta.
 */
function fyc_register_add_meta( $user_id ) {
    add_user_meta( $user_id, \'_new_user\', \'1\' );
}
add_action( \'user_register\', \'fyc_register_add_meta\' );


/**
 * Loads pop-up on first login.
 */
function shapeSpace_first_user_login($user_login, $user) {

    $new_user = get_user_meta( $user->ID, \'_new_user\', true );

        if ( $new_user ) {

        update_user_meta( $user->ID, \'_new_user\', \'0\' );

        /**
         * Embed modal in footer
         */
        function fsc_display_modal_first_login() { ?>

            <div class="welcome-modal">
                <header>
                    <h1>Welcome!</h1>
                </header>
            </div>

            <?php
        }
        add_action( \'in_admin_footer\', \'fsc_display_modal_first_login\' );
    }
}
add_action( \'wp_login\', \'shapeSpace_first_user_login\', 10, 2 );

2 个回复
SO网友:butlerblog

问题是wp_loginwp_signon() 作用但这并不是用户登录的终点。之后,它们将被重定向(以便可以读取登录期间设置的身份验证cookie)。因此,用户将被转移到新页面,而您的页脚操作将永远不会触发。因此,正如所写的那样,它永远不会起作用(希望它有道理)。

您只需将现有逻辑用于in_admin_footer 行动您的逻辑并不需要确定用户是否正在完成登录,因为一旦他们第一次登录,meta就会更改。

这应该解决它:

/**
 * Set User meta.
 */
function fyc_register_add_meta( $user_id ) {
    add_user_meta( $user_id, \'_new_user\', \'1\' );
}
add_action( \'user_register\', \'fyc_register_add_meta\' );


/**
 * Loads pop-up on first login.
 */
function shapeSpace_first_user_login($user_login, $user) {

    $new_user = get_user_meta( $user->ID, \'_new_user\', true );

    if ( $new_user ) {

    update_user_meta( $user->ID, \'_new_user\', \'0\' ); ?>

        <div class="welcome-modal">
            <header>
                <h1>Welcome!</h1>
            </header>
        </div>

    <?php }
}
add_action( \'in_admin_footer\', \'fsc_display_modal_first_login\' );

SO网友:William Bay

好吧,这需要一些发挥和故障排除,但我得到了它的工作。第二个函数不喜欢传入参数,因此我最终使用get\\u current\\u user\\u id()来更新用户登录状态。

(并决定将JS文件排队以启动modal)。

function fsc_new_user( $user_login, $user ) {
    if ( $new_user = get_user_meta( $user->id, \'_new_user\', true ) ) {
        // They\'ve Logged In Before, set to 0.
        update_user_meta( $user->id, \'_new_user\', \'0\' );
    } else {
        // First Login, set it to 1.
        update_user_meta( $user->id, \'_new_user\', 1 );
    }
}
add_action( \'wp_login\', \'fsc_new_user\', 10, 2 );



function fsc_display_modal_first_login() {

    if ( is_user_logged_in() ) {
        // Get current total amount of logins (should be at least 1).
        $new_user = get_user_meta( get_current_user_id(), \'_new_user\', true );
        // If it\'s 1, it\'s their first time logging in, display the Modal.
        if ( \'1\' === $new_user ) {

            wp_enqueue_script( \'modal\', plugin_dir_url( __FILE__ ) . \'js/flaunt-sites-core-welcome-modal.js\', array(), 20190419, true );
            update_user_meta( get_current_user_id(), \'_new_user\', \'0\' );

        }
    }
}
add_action( \'admin_footer\', \'fsc_display_modal_first_login\' );

相关推荐

选项更新后重定向至https://my-site/wp-admin/而不是https://my-site/wordpress/wp-admin/

我为我的一个客户安装了插件,但我遇到了一个bug。在使用wordpress设置系统的插件设置页面中,当我单击提交按钮激活许可证密钥时,重新检测是https://my-site/wp-admin/options-general.php?page=settings-my-plugin&tab=premium&action=activate 而不是https://my-site/wordpress/wp-admin/options-general.php?page=settings-my-plu