Verhindert die Umleitung zu Seite / Seite, wenn reservierter Begriff ‘Name’ in $ _POST, wenn Wert eine Seite / Post-Titel ist

Ich verwende ein bestimmtes Zahlungsgateway, das in seiner Zahlungsantwort den Parameter ‘name’ enthält. Ich bin mir bewusst, dass dies ein reservierter Begriff ist, der nicht verwendet werden sollte. Leider habe ich keine Kontrolle über die geposteten Daten.

Ich habe die folgende function erzeugt, die den Parameter ‘name’ umbenennt und dann auf die angeforderte Seite umleitet (anstatt eine 404 zu zeigen).

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

Wenn der Wert des Parameters ‘name’ jedoch eine (teilweise) Übereinstimmung für einen vorhandenen Seiten- oder Posttitel darstellt, wird WordPress auf die Seite / den Post umgeleitet, bevor meine function ausgeführt wird. Ich habe versucht, verschiedene Aktionen auszuführen, um die function früher auszuführen, aber ohne Wirkung – gibt es einen Weg ohne unerwünschte Nebenwirkungen?

Solutions Collecting From Web of "Verhindert die Umleitung zu Seite / Seite, wenn reservierter Begriff ‘Name’ in $ _POST, wenn Wert eine Seite / Post-Titel ist"

Ich würde eigentlich einen alternativen Ansatz vorschlagen – entfernen Sie die function, die die Umleitung an erster Stelle verursacht:

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

Ich habe den wp Hook benutzt, der ziemlich kurz vor template_redirect läuft. Denken Sie daran, dass Sie vor dem Testen den Cache Ihres Browsers leeren müssen (diese Weiterleitungen sind 301 ).