Come posso verificare se la pagina corrente è wp-login.php
o wp-signup.php
?
Esistono soluzioni più eleganti dell'utilizzo $_SERVER['REQUEST_URI']
?
Come posso verificare se la pagina corrente è wp-login.php
o wp-signup.php
?
Esistono soluzioni più eleganti dell'utilizzo $_SERVER['REQUEST_URI']
?
Risposte:
Usa il globale $pagenow
, che è un set globale comune di WordPress in fase di esecuzione:
if ( $GLOBALS['pagenow'] === 'wp-login.php' ) {
// We're on the login page!
}
Puoi anche controllare il tipo di pagina di accesso, ad esempio la registrazione:
if ( $GLOBALS['pagenow'] === 'wp-login.php' && ! empty( $_REQUEST['action'] ) && $_REQUEST['action'] === 'register' ) {
// We're registering
}
Il seguente codice è considerato legacy e non deve essere utilizzato (è wp-register.php
stato deprecato e successivamente rimosso un po 'di tempo fa):
if ( in_array( $GLOBALS['pagenow'], array( 'wp-login.php', 'wp-register.php' ) ) )
run_my_funky_plugin();
if( is_wplogin() ){
...
}
codice:
function is_wplogin(){
$ABSPATH_MY = str_replace(array('\\','/'), DIRECTORY_SEPARATOR, ABSPATH);
return ((in_array($ABSPATH_MY.'wp-login.php', get_included_files()) || in_array($ABSPATH_MY.'wp-register.php', get_included_files()) ) || (isset($_GLOBALS['pagenow']) && $GLOBALS['pagenow'] === 'wp-login.php') || $_SERVER['PHP_SELF']== '/wp-login.php');
}
1) A volte, se provi a controllare la pagina di accesso utilizzando REQUEST_URI
(o SCRIPT_PATH
), otterrai VALORI NON CORRETTI, poiché molti plug-in cambiano gli URL LOGIN & ADMIN .
2) $pagenow
ti darà anche un valore errato in quel caso!
get_included_files()
sembra la soluzione più accurata (almeno per me).
Un modo più moderno per farlo, dovrebbe funzionare anche quando l'URL wp-login viene modificato dai plugin e quando WP si trova in una sottocartella, ecc:
if(stripos($_SERVER["SCRIPT_NAME"], strrchr(wp_login_url(), '/')) !== false){
/* ... */
}
return false !== stripos( wp_login_url(), $_SERVER['SCRIPT_NAME'] );
. Mi sembra un po 'più pulito.
$GLOBALS['pagenow']
non funziona, usa $_SERVER['PHP_SELF']
.
if ( in_array( $_SERVER['PHP_SELF'], array( '/wp-login.php', '/wp-register.php' ) ) ){
// do something.
}
e se il tuo wordpress non è installato nella cartella principale del web, dovresti usare alcuni parametri come YOUR_WP_PATH/wp-login.php
sostituire gli elementi nell'array.
L'ho implementato usando il metodo wp_login_url () di WordPress come segue:
public static function is_wp_login() {
$login_path = rtrim( strtolower( parse_url( wp_login_url( '', true ), PHP_URL_PATH ) ), '/' );
return ( rtrim( strtolower( $_SERVER[ 'REQUEST_URI' ] ), '/' ) == $login_path );
}
Il solo confronto di entrambi i percorsi (poiché è difficile essere assolutamente sicuri sull'uso di SSL in quanto potrebbe essere terminato) dovrebbe essere sufficiente ... Significa, tuttavia, che un plug-in o uno sviluppatore di temi che modifica il modulo di accesso predefinito deve aver fatto quindi nel modo giusto ...
Sono interessato solo alla pagina di registrazione, non alla pagina di accesso. Quindi questo potrebbe non essere voluto da tutti.
$ GLOBALS ['pagenow'] restituisce index.php per me. Forse a causa di buddypress o del mio tema.
Quindi ho usato
is_page('register')
Se controlli il corpo della pagina di registrazione, ha anche l'ID, quindi se dice page-id-4906 , puoi usarlo in questo modo se funziona meglio:
is_page('4906')
Nessuna delle risposte attuali ha funzionato per me.
Quello che ho fatto è stato verificare se l' $_GET
array ha una chiave 'page' e se il suo valore è 'accedi'.
if (isset($_GET['page']) && $_GET['page'] == 'sign-in'){
// you're on login page
}
Alcune soluzioni proposte qui hanno funzionato, quindi sono arrivato con qualcosa di veramente semplice che funziona su un normale sito WordPress (non testato su Multisito).
Semplice come:
if( !isset($_GET['action']) ){
echo 'This is the Login Page.';
} else {
echo 'This is the Register Page.';
}
Tiene conto del parametro url ?action=register
, che esiste solo quando ti trovi nella pagina di registrazione.
Ecco una versione PSR-2 della risposta @ T.Todua. L'ho appena formattato bene. Questo è meglio per manipolare la funzione, come l'aggiunta di un filtro a scopo di test, ecc:
function isLoginPage()
{
$is_login_page = false;
$ABSPATH_MY = str_replace(array('\\', '/'), DIRECTORY_SEPARATOR, ABSPATH);
// Was wp-login.php or wp-register.php included during this execution?
if (
in_array($ABSPATH_MY . 'wp-login.php', get_included_files()) ||
in_array($ABSPATH_MY . 'wp-register.php', get_included_files())
) {
$is_login_page = true;
}
// $GLOBALS['pagenow'] is equal to "wp-login.php"?
if (isset($GLOBALS['pagenow']) && $GLOBALS['pagenow'] === 'wp-login.php') {
$is_login_page = true;
}
// $_SERVER['PHP_SELF'] is equal to "/wp-login.php"?
if ($_SERVER['PHP_SELF'] == '/wp-login.php') {
$is_login_page = true;
}
return $is_login_page;
}