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?
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
).