私はWP 4.9.8に取り組んでおり、最初にサイトを見たときにユーザーにパスワードの変更を強制するスクリプトを探しています。それは企業のウェブサイトです、ユーザーは偽の電子メールでcsvファイルのインポートによって追加されます。メールアドレスを変更することはできません。
パスワードを変更するためのフォームはページ内にある必要があります。profile.php
ページにすることはできません。
Simon Blackbournのコード( https://github.com/lumpysimon/wp-force-password-change )を見つけましたが、
WP Webサイトにプラグインが見つかりましたが、profile.phpページ(パスワードの強制変更)が開きます。
私はショートコード付きのフォームを表示するpippinspluginsページ( https://pippinsplugins.com/change-password-form-short-code/ /)からコードを見つけました。
しかし、私は彼らが私が必要とすることをするためにどうやってするのかわからない。どうもありがとうございます。私があまり理解できないのであれば、すみません、私はフランス語です;-)
私は頭がおかしくなると思う:-(何もうまくいかない。ログインページはフォームを表示するショートコードのあるカスタムページである。1. Force password change pluginを使ったリダイレクトはうまくいかない。Peterのリダイレクトが有効になっている場合のみOKユーザーがログインしてもパスワードの変更ページにリダイレクトされない場合は、常に次のようなフォームのページが表示されます。ログインします。最後に行ったテストは、wp_get_current_user()の後に行を追加することによるForce Change Passwordプラグインです。
function force_password_change_redirect() {
global $current_user;
if ( is_admin() ) {
$screen = get_current_screen();
if ( 'profile' == $screen->base )
return;
if ( 'plugins' == $screen->base )
return;
}
if ( !is_user_logged_in() )
return;
wp_get_current_user();
if( isset($user->ID) ) {
$changed_password = get_user_meta( $current_user->ID, 'force-password-change', true ) ;
if( $changed_password == true ) {
return get_site_url('/changement-mdp/');
} else {
return $redirect_to;
}
}
}
変更後にusermeta force-password-changeを削除するようにpippinコードに1行追加しましたが、動作しません。エラーはありませんが、このmeta_keyとデータベース内のその値は常に表示されます。
if(empty($ errors)){//ここでパスワードを変更する$ user_data = array( 'ID' => $ user_ID、 'user_pass' => $ _POST ['pippin_user_pass']); wp_update_user($ user_data); delete_user_meta($ user_id、 'パスワードの変更'、1); //ここでパスワード変更のEメールを送信する(WPでない場合)wp_redirect(add_query_arg( 'password-reset'、 'true'、$ _POST ['pippin_redirect']));出口; }
パスワード変更成功後のリダイレクトは機能しません。パスワードは変更されましたが、パスワードを変更するためにページに戻りました。
私は彼の役割によってユーザーをリダイレクトするためにPeterのリダイレクトをインストールしました。以前にではなく自分のパスワードを変更した後で彼をリダイレクトする方法
私は完全に迷子になった助けてくれてありがとう!
12月19日編集
私はいつも解決策を探しています。私はpippinpluginsからのコードを追加することによってForce Change Passwordプラグインを修正しようとしました。しかし、私はフロントエンドと管理者にホワイトページを持っているので、確かにたくさんのエラーがあります。エラーを見つけるのを手伝ってもらえますか。
どうもありがとう
<?php
/*
Plugin Name: Force Password Change
Description: Require users to change their password on first login.
Version: 0.6
License: GPL v2 or later
Plugin URI: https://github.com/lumpysimon/wp-force-password-change
Author: Simon Blackbourn
Author URI: https://Twitter.com/lumpysimon
Author Email: [email protected]
Text Domain: force-password-change
Domain Path: /languages/
About this plugin
-----------------
This plugin redirects newly-registered users to the Admin -> Edit Profile page when they first log in.
Until they have changed their password, they will not be able to access either the front-end or other admin pages.
An admin notice is also displayed informing them that they must change their password.
New administrators must also change their password, but as a safety measure they can also access the Admin -> Plugins page.
Please report any bugs on the WordPress support forum at http://wordpress.org/support/plugin/force-password-change or via GitHub at https://github.com/lumpysimon/wp-force-password-change/issues
Development takes place at https://github.com/lumpysimon/wp-force-password-change (all pull requests will be considered)
About me
--------
I'm Simon Blackbourn, co-founder of Lumpy Lemon, a small & friendly UK-based
WordPress design & development company specialising in custom-built WordPress CMS sites.
I work mainly, but not exclusively, with not-for-profit organisations.
Find me on Twitter, Skype & GitHub: lumpysimon
License
-------
Copyright (c) Lumpy Lemon Ltd. All rights reserved.
Released under the GPL license:
http://www.opensource.org/licenses/gpl-license.php
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
*/
$force_password_change = new force_password_change;
class force_password_change {
// just a bunch of functions called from various hooks
function __construct() {
add_action( 'init', array( $this, 'init' ) );
add_action( 'user_register', array( $this, 'registered' ) );
add_action( 'personal_options_update', array( $this, 'updated' ) );
add_action( 'template_redirect', array( $this, 'redirect' ) );
add_action( 'current_screen', array( $this, 'redirect' ) );
add_action( 'admin_notices', array( $this, 'notice' ) );
}
// load localisation files
function init() {
load_plugin_textdomain(
'force-password-change',
false,
dirname( plugin_basename( __FILE__ ) ) . '/languages'
);
}
// on ajoute un champ meta dans la table users_meta avec la valeur 1 lors de l'enregistrement
function registered( $user_id ) {
add_user_meta( $user_id, 'force-password-change', 1 );
}
// on efface cette valeur quand le mot de passe a été changé
function updated( $user_id ) {
if($_POST['pippin_user_pass'] == $_POST['pippin_user_pass_confirm']) {
delete_user_meta( $user_id, 'force-password-change' );
}
}
/*shortcode pour modifier le mdp*/
function pippin_change_password_form() {
global $post;
if (is_singular()) :
$current_url = get_permalink($post->ID);
else :
$pageURL = 'http';
if ($_SERVER["HTTPS"] == "on") $pageURL .= "s";
$pageURL .= "://";
if ($_SERVER["SERVER_PORT"] != "80") $pageURL .= $_SERVER["SERVER_NAME"].":".$_SERVER["SERVER_PORT"].$_SERVER["REQUEST_URI"];
else $pageURL .= $_SERVER["SERVER_NAME"].$_SERVER["REQUEST_URI"];
$current_url = $pageURL;
endif;
if(empty($errors)){
$redirect = home_url();}
else {
$redirect = $current_url;}
ob_start();
// afficher les éventuelles erreurs lors de la saisie du nouveau mot de passe
pippin_show_error_messages(); ?>
<?php if(isset($_GET['password-reset']) && $_GET['password-reset'] == 'true') { ?>
<div class="pippin_message success">
<span><?php _e('Password changed successfully', 'rcp'); ?></span>
</div>
<?php } ?>
<form id="pippin_password_form" method="POST" action="<?php echo esc_url($url); ?>">
<fieldset>
<p>
<label for="pippin_user_pass"><?php _e('New Password', 'rcp'); ?></label>
<input name="pippin_user_pass" id="pippin_user_pass" class="required" type="password"/>
</p>
<p>
<label for="pippin_user_pass_confirm"><?php _e('Password Confirm', 'rcp'); ?></label>
<input name="pippin_user_pass_confirm" id="pippin_user_pass_confirm" class="required" type="password"/>
</p>
<p>
<input type="hidden" name="pippin_action" value="reset-password"/>
<input type="hidden" name="pippin_redirect" value="<?php echo $redirect; ?>"/>
<input type="hidden" name="pippin_password_nonce" value="<?php echo wp_create_nonce('rcp-password-nonce'); ?>"/>
<input id="pippin_password_submit" type="submit" value="<?php _e('Change Password', 'pippin'); ?>"/>
</p>
</fieldset>
</form>
<?php
return ob_get_clean();
}
// le formulaire de modification de mot de passe
function pippin_reset_password_form() {
if(is_user_logged_in()) {
return pippin_change_password_form();
}
}
add_shortcode('password_form', 'pippin_reset_password_form');
// si:
// - on est loggé,
// - le champ meta est présent pour cet utilisateur,
// - on est sur le front-end ou n'importe quel écran sauf la page d'édition de profil ou plugins,
// alors on redirige vers la page de changement de mot de passe (modif code Force Password Change)
function force_password_change_redirect() {
global $current_user;
if ( is_admin() ) {
$screen = get_current_screen();
if ( 'profile' == $screen->base )
return;
if ( 'plugins' == $screen->base )
return;
}
if ( !is_user_logged_in() )
return;
wp_get_current_user();
$changed_password = get_user_meta( $current_user->ID, 'force-password-change', true ) ;
if( $changed_password == true ) {
return get_site_url('/changement-mdp/');
} else {
return $redirect_to;
}
}
function pippin_reset_password() {
// reset a users password
if(isset($_POST['pippin_action']) && $_POST['pippin_action'] == 'reset-password') {
global $user_ID;
if(!is_user_logged_in())
return;
if(wp_verify_nonce($_POST['pippin_password_nonce'], 'rcp-password-nonce')) {
if($_POST['pippin_user_pass'] == '' || $_POST['pippin_user_pass_confirm'] == '') {
// password(s) field empty
pippin_errors()->add('password_empty', __('Please enter a password, and confirm it', 'pippin'));
}
if($_POST['pippin_user_pass'] != $_POST['pippin_user_pass_confirm']) {
// passwords do not match
pippin_errors()->add('password_mismatch', __('Passwords do not match', 'pippin'));
}
// retrieve all error messages, if any
$errors = pippin_errors()->get_error_messages();
if(empty($errors)) {
// change the password here
$user_data = array(
'ID' => $user_ID,
'user_pass' => $_POST['pippin_user_pass']
);
delete_user_meta( $user_id, 'force-password-change',1 );
wp_update_user($user_data);
// send password change email here (if WP doesn't)
wp_redirect(add_query_arg('password-reset', 'true', $_POST['pippin_redirect']));
exit;
}
}
}
}
add_action('init', 'pippin_reset_password');
if(!function_exists('pippin_show_error_messages')) {
// displays error messages from form submissions
function pippin_show_error_messages() {
if($codes = pippin_errors()->get_error_codes()) {
echo '<div class="pippin_message error">';
// Loop error codes and display errors
foreach($codes as $code){
$message = pippin_errors()->get_error_message($code);
echo '<span class="pippin_error"><strong>' . __('Error', 'rcp') . '</strong>: ' . $message . '</span><br/>';
}
echo '</div>';
}
}
}
if(!function_exists('pippin_errors')) {
// used for tracking error messages
function pippin_errors(){
static $wp_error; // Will hold global variable safely
return isset($wp_error) ? $wp_error : ($wp_error = new WP_Error(null, null, null));
}
}
// if the user meta field is present, display an admin notice
function notice() {
global $current_user;
wp_get_current_user();
if ( get_user_meta( $current_user->ID, 'force-password-change', true ) ) {
printf(
'<div class="error"><p>%s</p></div>',
__( 'Please change your password in order to continue using this website', 'force-password-change' )
);
}
}
} // class
ご協力いただきありがとうございます !
あなたはすでにあなたが必要とするほとんどすべてを持っています(あなたが上に挙げたプラグインがうまくいくと仮定して)。リンクするだけです:
両方のプラグインとそれがあなたが説明したものからそうであるように聞こえるなら、それはそれをするべきです。
ユーザーが一度パスワードの変更を強いられた場合、一度ログオフして再度ログインしても、再度パスワードを変更する必要はないことをテストすることをお勧めします。 ;)