wp_title working una tag son page not las get_the_title galerías funciones entrada cómo cuales crear con basicas php wordpress wordpress-plugin

php - working - wp_title filter



Modificar una función para devolver el nombre de usuario correctamente, para un plugin de wordpress (1)

Primero, mi version de wordpress

Name : wordpress Relocations: (not relocatable) Version : 4.4 Vendor: Fedora Project Release : 1.el6 Build Date: Wed 09 Dec 2015 11:40:49 AM EST

los complementos en mi centos6.4 se instalarían en esta ubicación:

/usr/share/wordpress/wp-content/plugins

Preste atención a que esta función (en mi sistema) no siempre devuelve un usuario, WP_Error también

/** * Authenticate the user using the username and password. * * @since 2.8.0 * * @param WP_User|WP_Error|null $user WP_User or WP_Error object from a previous callback. Default null. * @param string $username Username for authentication. * @param string $password Password for authentication. * @return WP_User|WP_Error WP_User on success, WP_Error on failure. */ function wp_authenticate_username_password($user, $username, $password) {

El wp-email-login que encontré podría ser adecuado para usted:

http://plugins.svn.wordpress.org/wp-email-login/trunk/email-login.php

Para que quede más claro, el fragmento del complemento 2, debe cambiarse a:

function email_login_authenticate( $user, $username, $password ) { if ( is_a( $user, ''WP_User'' ) ) return $user; if ( !empty( $username ) ) { // add this line to format email - propose change #1 $username = str_replace( ''&'', ''&'', stripslashes( $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'' ) ) { // These 4 lines came from plugin2 from your system, keep as is global $WishListMemberInstance; $WishListMemberInstance->WPMAutoLogin($user->ID); $_POST[''log''] = $username; $WishListMemberInstance->Login(); } // no need to authenticate another time, return - proposed change #2 // authenticate twice could be a problem as well return $result; } return wp_authenticate_username_password( null, $username, $password ); }

Tengo dos complementos de Wordpress y ambos autores se niegan a admitir que el problema / conflicto está en su sitio, pero está bastante claro que ambas partes pueden solucionar el problema con mucha facilidad.

Le proporcioné a un autor del complemento la solución que no tiene ningún impacto negativo en su complemento de ninguna manera, no causa ningún problema si la persona tiene el segundo complemento instalado o no, pero no agregará la solución a su complemento aunque Añade compatibilidad con un complemento diferente.

No puedo averiguar cómo corregir el segundo complemento, pero sé lo que hay que hacer ...

Fragmento del complemento 1 (uno al que proporcioné una solución)

/* 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 ); }

Ahora, si encuentra la línea:

$validuser = wp_login( $data[''username''], $data[''password''] );

Y reemplazarlo con:

//$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''] ); } }

Luego esto soluciona el problema porque cambia la variable $data[''username''] a su nombre de usuario real, lo que significa que el resto del complemento 1 continuará correctamente y vinculará ciertos detalles al nombre de usuario (cuenta) en lugar de un nombre de usuario consistente en su correo electrónico (que obviamente no existe como nombre de usuario)

  • Si existe un nombre de usuario (intentaron iniciar sesión con un nombre de usuario y contraseña), entonces continúa como siempre.
  • Si el nombre de usuario NO existe, entonces verifica si el correo electrónico existe en su lugar, si lo hace, tomará el nombre de usuario de la dirección de correo electrónico que ingresó y simplemente cambia el campo de nombre de usuario ingresado con su nombre de usuario real en lugar de su correo electrónico y luego continúa como siempre

Fragmento del complemento 2 (uno para el que necesito una solución)

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 ); }

No estoy 100% seguro de lo que hace el fragmento anterior en su totalidad, pero lo entiendo lo suficientemente bien y necesito cambiarlo para que devuelva el nombre de usuario correcto de alguna manera para que $data[''username''] se reemplace con el nombre de usuario en su lugar del correo electrónico (si se utiliza un correo electrónico)