Also arbeite ich wieder an meiner Änderung der Anmeldeseite … und ich stoße auf ein anderes Problem. Hier ist das Szenario … Ich habe ein Plugin, das aus zwei Komponenten besteht: einem Skript, das das Benutzernamenfeld im Anmelde-/Registrierungsformular umschreibt, und einer Funktion, die den Validierungs-Handler bei der Registrierung überschreibt.
Hier die besagten Dateien…
validator.php
<?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/usernamerewrite.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);
}
}
);
}
});
Das Problem ist, dass, wenn ich die Zeile wp_enqueue_script so schreibe, wie sie derzeit ist (wobei das Skript im Header geladen wird), die Aktionsfunktion ordnungsgemäß behandelt wird, aber das Umschreiben nie erfolgt. Wenn ich es umgekehrt so ändere, dass das Skript in die Fußzeile geladen wird, erfolgt die Umschreibung, aber die Aktion wird nicht mehr ordnungsgemäß behandelt (das Benutzernamenfeld wird vor dem Senden zurückgesetzt). Ich bin völlig ratlos.
Zweites (kleines) Ärgernis: Es gibt immer eine leichte Verzögerung zwischen dem Laden der Seite und dem Auftreten des Umschreibens. Alle Gedanken darüber, wie dies transparenter gemacht werden kann, wären sehr willkommen.
BEARBEITEN: Wenn Sie die Frage ablehnen, können Sie zumindest angeben, warum …
Warum erstellen Sie neue Eingabeelemente in Ihrem js? Wp bietet ihnen nein? Soweit ich weiß, möchten Sie am Frontend nur einen Text mit der Aufschrift „Minecraft-Benutzername“ anstelle von „Benutzername“ ersetzen und am Backend, das Sie validieren möchten. Ist das korrekt? In diesem Fall macht Ihr js zu viel …
– Benutzer1115652
6. August 2012 um 16:33 Uhr