私はメインのwordpressログインページに追加のログインフィールドを追加しました。利用規約に同意するには、チェックボックスをオンにします。そうしないと、ユーザーはログインできません。
この質問 からコードを取得しました。これにより、ログインにカスタムチェックボックスを追加することができました。しかし、チェックボックスがチェックされているかどうかを検証するために与えられたコードを修正しようとすると、私は仕事に取り掛かることができません。
function check_checkbox($user) {
$acceptance = $_POST['terms_acceptance'];
$user = get_user_by('login', $username );
if( !$user || !isset($acceptance) ){
remove_action('authenticate', 'wp_authenticate_username_password', 20);
$user = new WP_Error( 'denied', __("<strong>ERROR</strong>: You're unique identifier was invalid.") );
}
return null;
}
add_filter( 'wp_authenticate_user', 'check_checkbox', 10, 3 );
図のように 'authenticate'と 'wp_authenticate_user'フィルタを試しましたが、どちらもうまくいきませんでした。
誰が私が間違っていることを私に言うことができますか?
これが完全に機能するコードです。functions.phpに入れてください。
add_action('login_form','my_added_login_field');
function my_added_login_field(){
?>
<p>
<label for="my_extra_field">I agree to the terms<br />
<input type="checkbox" value="1" class="input" id="my_extra_field" name="my_extra_field_name"/></label>
</p>
<?php
}
function check_checkbox($user, $password)
{
if( !isset($_POST['my_extra_field_name']) )
{
remove_action('authenticate', 'wp_authenticate_username_password', 20);
$user = new WP_Error( 'denied', __("<strong>ERROR</strong>: Please agree to our terms.") );
}
return $user;
}
add_filter( 'wp_authenticate_user', 'check_checkbox', 10, 3 );
add_filter('wp_authenticate_user', 'myplugin_auth_login',10,2);
function myplugin_auth_login ($user, $password) {
//do any extra validation stuff here
return $user;
}
$user
オブジェクトを返す必要があります。あなたの関数は常にnull
を返します。これは完全にテストされていませんが、最後の行でreturn $user;
の代わりにreturn null;
を使用する必要があるように見えます。