Ich habe zwei WordPress-Plugins und beide Autoren der Plugins weigern sich zuzugeben, dass der Konflikt / das Problem ihre Website ist, aber es ist ziemlich klar, dass beide Parteien das Problem sehr einfach beheben können.
Ich habe einem Plugin-Autor den Fix zur Verfügung gestellt, der in keiner Weise negative Auswirkungen auf sein Plugin hat. Es verursacht keine Probleme, ob die Person das zweite Plugin installiert hat oder nicht, aber sie wird den Fix nicht zu ihrem Plugin hinzufügen, obwohl es fügt Kompatibilität mit einem anderen Plugin hinzu.
Ich kann nicht herausfinden, wie ich das zweite Plugin reparieren kann, aber ich weiß, was getan werden muss …
Ausschnitt aus Plugin 1 (eines, für das ich einen Fix bereitgestellt habe)
/* check if the user is valid */
if ( true === wlm_admin_in_admin() || true === $special_bypass ) {
$validuser = username_exists( $data['username'] );
if ( ! $validuser ) {
$validuser = email_exists( $data['email'] );
$user_info = get_userdata( $validuser );
$data['username'] = $user_info->user_login;
}
$data['password'] = __( 'Already assigned', 'wishlist-member' );
} else {
$validuser = wp_login( $data['username'], $data['password'] );
}
if ( $validuser ) {
$user = $this->Get_UserData( 0, $data['username'] );
/* check for blacklist status */
$blacklist = $this->CheckBlackList( $user->user_email );
}
Wenn Sie nun die Zeile finden:
$validuser = wp_login( $data['username'], $data['password'] );
Und ersetzen Sie es durch:
//$validuser = wp_login( $data['username'], $data['password'] );
$tmpvaliduser = username_exists( $data['username'] );
if ($tmpvaliduser)
$validuser = wp_login( $data['username'], $data['password'] );
if ( ! $validuser || !$tmpvaliduser) {
if((!$data['email']) && !(false === strrpos($data['username'], "@")) ) {
$validuser = email_exists( $data['username'] );
$user_info = get_userdata( $validuser );
$data['username'] = $user_info->user_login;
$validuser = wp_login( $data['username'], $data['password'] );
}
}
Dann behebt dies das Problem, weil es die ändert $data['username']
Variable zu ihrem tatsächlichen Benutzernamen, was bedeutet, dass der Rest des Plugins 1 korrekt fortfährt und bestimmte Details an den Benutzernamen (Konto) bindet und nicht an einen Benutzernamen, der aus ihrer E-Mail besteht (die offensichtlich nicht als Benutzername existiert).
- Wenn der Benutzername existiert (sie haben versucht, sich mit Benutzername und Passwort anzumelden), wird es wie gewohnt fortgesetzt.
- Wenn der Benutzername NICHT existiert, wird stattdessen geprüft, ob die E-Mail existiert. Wenn dies der Fall ist, wird der Benutzername aus der eingegebenen E-Mail-Adresse abgerufen und das eingegebene Benutzernamensfeld einfach durch den tatsächlichen Benutzernamen anstelle der E-Mail-Adresse ersetzt und dann wie gewohnt fortgesetzt
Ausschnitt aus Plugin 2 (Eines, für das ich eine Korrektur benötige)
function email_login_authenticate( $user, $username, $password ) {
if ( is_a( $user, 'WP_User' ) )
return $user;
if ( !empty( $username ) ) {
$user = get_user_by( 'email', $username );
if ( isset( $user, $user->user_login, $user->user_status ) && 0 == (int) $user->user_status ) {
$username = $user->user_login;
}
$result = wp_authenticate_username_password( null, $username, $password );
if (is_a ( $result, 'WP_User' ) ) {
global $WishListMemberInstance;
$WishListMemberInstance->WPMAutoLogin($user->ID);
$_POST['log'] = $username;
$WishListMemberInstance->Login();
}
}
return wp_authenticate_username_password( null, $username, $password );
}
Ich bin mir nicht 100% sicher, was das obige Snippit vollständig macht, aber ich verstehe es gut genug und muss es so ändern, dass es funktioniert gibt den korrekten Benutzernamen zurück irgendwie so das $data['username']
wird durch den Benutzernamen ersetzt anstelle der E-Mail (falls eine E-Mail verwendet wird)
entsprechend codex.wordpress.org/Function_Reference/wp_login
wp_login()
ist veraltet. Es ist schon seit langem veraltet. Kombinieren Sie diesen Indizienbeweis mit der Einstellung des Autors von Plugin1, vielleicht ist es an der Zeit, dieses Plugin nicht mehr zu verwenden.– James Jones
7. Januar 2016 um 23:37 Uhr
@JamesJones Das ist das
wp_login()
Funktion nicht in der veralteten Liste der Funktionen ist, würde ich davon ausgehen, dass sie entfernt wurdenwp_login()
vollständig von 4.4.1 und dass der Plugin-Autor sein eigenes Custom erstellt hatwp_login()
Funktion. Um fair zu Plugin 1 zu sein, werben ihr WordPress und ihr Plugin nicht für die Möglichkeit, sich mit E-Mail anzumelden, also ist es nicht wirklich ihre Aufgabe, das Problem zu beheben. Stattdessen sollte der Autor von Plugin 2 es beheben, da es sein Plugin ist, das den Fehler hat.– Ryflex
8. Januar 2016 um 3:58 Uhr
Was sind die eigentlichen Plugins, die wir uns hier ansehen?
– jbafford
11. Januar 2016 um 0:38 Uhr
Was ist das Problem und was versuchst du zu erreichen? Niemand antwortet, weil die Frage äußerst vage ist.
– Jim Maguire
12. Januar 2016 um 13:58 Uhr
Könntest du Plugin 1 nicht einfach lokal aktualisieren? Wenn das Plugin aktualisiert wird, müssen Sie es erneut reparieren, aber Sie können Updates dafür umgehen. Oder erstellen Sie einen Fork davon.
– Sricks
13. Januar 2016 um 0:34 Uhr