WordPress: Hvordan deaktiverer man WordPress’ kanoniske omdirigering til nærmeste matchende URL og tvinger 404-side frem?

Når du arbejder med WordPress, kan der være tidspunkter, hvor du ønsker at ændre standardadfærd og tvinge visse sider til at returnere en 404-fejl i stedet for at blive omdirigeret. Dette kan være nyttigt i situationer, hvor du ønsker at skjule visse URL’er eller give en brugerdefineret fejlside i stedet for standardomdirigeringen.

I dette blogindlæg vil vi se på et brugerdefineret PHP-kodestykke, der giver dig mulighed for at stoppe WordPress-omdirigeringer og i stedet tvinge visse sider til at returnere en 404-fejlside.

Baggrund
Når du besøger en side på en WordPress-hjemmeside, bearbejder WordPress anmodningen og forsøger at finde den mest passende side at vise. Dette kan resultere i omdirigeringer, hvor WordPress forsøger at matche URL’en med en eksisterende side.

Men hvad hvis du ønsker at ændre denne adfærd og forhindre WordPress i at omdirigere visse URL’er? Her kommer det brugerdefinerede kodeeksempel ind.

Eksempel: eksempel.com/biler/bilmærke/bilmodel.

Ovenstående, er et forælder/barn-forhold defineret med bilmærket og bilmodellen, med hierarki for en given posttype. I tilfælde hvor du indtaster en bilmodel, der ikke eksisterer, vil WordPress’ standardadfærd for omdirigering sende trafikken til forældresiden. Jeg ønsker dog at definere en 404-fejlside.

**Eksempel:**

eksempel.com/biler/audi/80.

Dette er ikke en gyldig sti. Jeg forventer derfor at se en 404-fejlside, hvilket er tilfældet, hvor denne funktion er relevant.

Kodeeksempel
Her er PHP-kodestykket:


add_filter('redirect_canonical', 'RedirctStop');
public function RedirctStop( $redirect_url ) {
    global $wp;
    $url = home_url( $wp->request );
    $matchThis = (strpos($url, 'elbilmatch'));
    if (!$matchThis) return $redirect_url;
    if( $redirect_url !== $url) {
        global $wp_query;
        $wp_query->set_404();
        status_header( 404 );
        nocache_headers();
    }
}

Hvordan det virker
Koden først tjekker, om URL’en indeholder strengen ‘elbilmatch’. Hvis det ikke gør det, vender funktionen tilbage og lader WordPress udføre omdirigeringen som normalt.

Hvis URL’en indeholder ‘elbilmatch’, sammenlignes $redirect_url med den aktuelle URL. Hvis de ikke er ens, indstilles WordPress til at vise en 404-side i stedet for at foretage en omdirigering.

Her er trin for trin:

public function RedirctStop( $redirect_url ) {: Her definerer du en offentlig funktion kaldet RedirctStop, som modtager en $redirect_url som parameter. Denne funktion vil blive kaldt, når WordPress forsøger at foretage en omdirigering.

global $wp;: Her globaliserer du variablen $wp, som indeholder oplysninger om den aktuelle WordPress-anmodning.

$url = home_url( $wp->request );: Du opretter en variabel $url ved at bruge home_url()-funktionen sammen med $wp->request. Dette giver dig den aktuelle anmodede URL.

$matchThis = (strpos($url, ‘elbilmatch’));: Du bruger strpos()-funktionen til at kontrollere, om strengen ‘elbilmatch’ findes i $url. Hvis den findes, tildeler du true til $matchThis, ellers tildeler du false.

if (!$matchThis) return $redirect_url;: Her tjekker du, om $matchThis er falsk (dvs. ‘elbilmatch’ ikke findes i URL’en). Hvis dette er tilfældet, returnerer du blot $redirect_url, hvilket betyder, at ingen ændringer foretages, og WordPress fortsætter med omdirigeringen som normalt.

if( $redirect_url !== $url) {: Dette er en betinget sætning, der tjekker, om $redirect_url ikke er det samme som $url, hvilket antyder, at WordPress forsøger at omdirigere brugeren.

global $wp_query;: Her globaliserer du $wp_query, som bruges til at manipulere WordPress-queryen.

$wp_query->set_404();: Du fortæller WordPress, at det skal indstille en 404-statuskode, hvilket betyder, at siden ikke findes.

status_header( 404 );: Du indstiller HTTP-statuskoden til 404, så serveren og browseren forstår, at siden ikke findes.

nocache_headers();: Dette hjælper med at forhindre caching af den 404-side.

Implementering
For at implementere dette kodeeksempel skal du tilføje det til din WordPress-installations tema-funktioner eller bruge det som en del af et brugerdefineret plugin. Funktionen startes ved hjælp af add_filter med redirect_canonical. Dette tilføjer RedirctStop-funktion som en filter på redirect_canonical. Nu vil funktionen blive udført, når WordPress forsøger at foretage en omdirigering.