Impedisci il reindirizzamento alla pagina / pagina quando il termine riservato ‘nome’ in $ _POST quando value è un titolo di pagina / post

Sto utilizzando un particolare gateway di pagamento che include nella risposta di pagamento il parametro “nome”. Sono consapevole che questo è un termine riservato che non dovrebbe essere usato. Sfortunatamente, non ho alcun controllo sui dati pubblicati.

Ho prodotto la seguente funzione che rinomina il parametro ‘name’ e quindi reindirizza alla pagina richiesta (invece di mostrare un 404).

function redirect() { if ( is_404() && isset($_GET['name']) && isset($_GET['instId']) ) { parse_str($_SERVER['QUERY_STRING'], $params); $params['fullname'] = $params['name']; unset($params['name']); $protocol = stripos($_SERVER['SERVER_PROTOCOL'],'https') === true ? 'https://' : 'http://'; $location = $_SERVER['HTTP_HOST'].strtok($_SERVER["REQUEST_URI"],'?').'?'.http_build_query($params); wp_redirect( $protocol.$location ); exit; } } add_action('template_redirect', 'redirect'); 

Tuttavia, se il valore del parametro ‘name’ è una corrispondenza (parziale) per una pagina esistente o il titolo di un post, WordPress reindirizza alla pagina / post prima dell’esecuzione della mia funzione. Ho provato ad agganciare varie azioni per far funzionare la funzione prima, ma senza alcun effetto. C’è un modo per aggirare questo senza effetti collaterali indesiderati?

Solutions Collecting From Web of "Impedisci il reindirizzamento alla pagina / pagina quando il termine riservato ‘nome’ in $ _POST quando value è un titolo di pagina / post"

In realtà suggerirei un approccio alternativo: rimuovere la funzione che causa il reindirizzamento in primo luogo:

 function wpse_227033_disable_name_redirect() { if ( is_404() && isset( $_GET['name'], $_GET['instID'] ) ) remove_action( 'template_redirect', 'redirect_canonical' ); } add_action( 'wp', 'wpse_227033_disable_name_redirect' ); 

Ho usato il wp hook che gira praticamente prima di template_redirect . Ricorda che dovrai cancellare la cache del browser prima del test (i reindirizzamenti sono 301 ).