web-dev-qa-db-ja.com

[カスタムログインを検証]フィールド

私はメインの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'フィルタを試しましたが、どちらもうまくいきませんでした。

誰が私が間違っていることを私に言うことができますか?

1

これが完全に機能するコードです。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 );
3
P-S

コーデックスごと...

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;を使用する必要があるように見えます。

0
s_ha_dum