source

WordPress 로그인 페이지 수정 문제

manysource 2023. 9. 17. 13:18

WordPress 로그인 페이지 수정 문제

로그인 페이지 수정 작업을 다시 하고 있습니다.또 다른 문제가 생겼어요시나리오는 이렇습니다.로그인/등록 양식의 사용자 이름 필드를 다시 쓰는 스크립트와 등록 시 유효성 확인 핸들러를 덮어쓰는 기능 등 두 가지 구성 요소로 구성된 플러그인이 있습니다.

여기 문제의 파일들이 있습니다...

validator.debook

<?php
// Rewrite registration form
function mpm_registration_form() {
    wp_enqueue_script('login_form', plugin_dir_url(__FILE__).'js/usernamerewrite.js', array('jquery'), false, false);
}
add_action('login_head', 'mpm_registration_form');

// Register actions
add_action('register_post', 'mpm_validator_verify_account', 10, 3);

// Check username against minecraft.net database
function mpm_validator_verify_account($login, $email, $errors) {
    $curl = curl_init();
    curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($curl, CURLOPT_URL, 'http://www.minecraft.net/haspaid.jsp?user='.rawurlencode($login));
    $mcacct = curl_exec($curl);
    curl_close($curl);

    if($mcacct != 'true') {
        if($mcacct == 'false') {
            $errors->add('mc_error', __('<strong>Error:</strong> Minecraft account is invalid.'));
            return $errors;
        } else {
            $errors->add('mc_error', __('<strong>Error:</strong> Unable to contact minecraft.net.'));
            return $errors;
        }
        add_filter('registration_errors', 'mpm_validator_verify_account', 10, 3);
    }
}

js/jsrewrite.js

jQuery(document).ready(function ($) {
    'use strict';
    /*global document: false */
    /*global $, jQuery */
    var username, reset;
    if ($('body').hasClass('login')) {
        username = document.createElement("input");
        username.type = 'text';
        username.name = 'log';
        username.id = 'user_login';
        username.className = 'input';
        username.size = '20';
        username.tabIndex = '10';
        reset = document.createElement("input");
        reset.type = 'text';
        reset.name = 'user_login';
        reset.id = 'user_login';
        reset.className = 'input';
        reset.size = '20';
        reset.tabIndex = '10';
        $('label').each(
            function () {
                if ($(this).text().trim() === 'Username') {
                    $(this).html('Minecraft Username<br/>');
                    $(this).append(username);
                } else if ($(this).text().trim() === 'Username or E-mail:') {
                    $(this).html('Minecraft Username or E-mail:<br/>');
                    $(this).append(reset);
                }
            }
        );
    }
});

문제는 현재와 같이 wp_enqueue_script 라인을 쓰면(스크립트가 헤더에 로드된 상태에서) 작업 기능은 제대로 처리되지만 다시 쓰는 일은 절대 일어나지 않는다는 것입니다.반대로 바닥글에 스크립트가 로드되도록 변경하면 다시 쓰기가 발생하지만 더 이상 작업이 제대로 처리되지 않습니다(사용자 이름 필드가 제출되기 전에 재설정됨).어찌할 바를 모르겠어요.

두 번째(사소한) 귀찮음:페이지 로딩과 재작성 발생 사이에는 항상 약간의 지연이 발생합니다.어떻게 하면 이것을 더 투명하게 할 수 있을지에 대한 어떤 생각이라도 해주시면 대단히 감사하겠습니다.

편집: 질문을 부결시키려면 최소한의 방법은 왜...

드디어 알아냈네요!내가 하는 방식은 끔찍했어요JS/jQuery에 대해 정말 정리해야 합니다.이것이 제가 얻은 결과입니다. 제 모든 테스트 케이스에서 잘 작동하고, 필드 라벨뿐만 아니라 메시지도 다시 씁니다.

jQuery(document).ready(function ($) {
'use strict';
/*global document: false */
/*global $, jQuery */
    $('label').each(
        function () {
            $(this).html($(this).html().replace('Username', 'Minecraft Username'));
        }
    );
    $('.message').each(
        function () {
            $(this).html($(this).html().replace('username', 'Minecraft username'));
        }
    );
});

기능을 다음과 같이 포장해 주실 수 있나요?

jQuery( document ).ready
(
   function( $ )
   {
        // your js here
   }
);

기능 뒤에 (jQuery)를 둘 필요가 없습니다.

페이지가 로드되기 전에 DOM 수정을 실행하면 작동할 수 없습니다.이제 헤더에 실어서 발사할 수 있습니다.

제출 이벤트 핸들러에 바인딩되지 않으므로 제출하기 전에 필드가 재설정되는 이유를 잘 모르겠습니다.아직도 이런 일이 있으면 우리에게 알려주세요.

전화 대신if ($('body').hasClass('login'))당신의 js에서 당신이 로그인 페이지에 있다면 아마도 당신은 php(login_head 동작을 사용)를 체크인하고 이 js를 당신의 사이트의 모든 페이지로 보내지 않기를 원할 것입니다.하지만 최적화하기 전에 먼저 작동을 시켜야 합니다.

만약 제출물이 백엔드에 도착하지 않는다면, 그것은 아마도 당신의 자바스크립트가 워드프레스 입력과 동일한 ID로 입력물을 다시 만들어서 대체하기 때문일 것입니다.내가 아는 한 그것은 당신이 추구하는 것이 아닙니다.기존 레이블만 교체하면 됩니다.

언급URL : https://stackoverflow.com/questions/11768817/problems-with-modifying-the-wordpress-login-page