WordPress: Løsning på WordPress’ 404-fejl ved brugerdefinerede ruter

Når du arbejder med brugerdefinerede ruter i WordPress, kan du støde på problemet, hvor WordPress fejlagtigt opfatter din rute som en 404-side. Dette kan være frustrerende, især når du har korrekt konfigureret din rute. Heldigvis er der en simpel løsning på dette problem.

For at fortælle WordPress, at din brugerdefinerede rute ikke skal behandles som en 404-side, kan du bruge følgende kode:

$wp_query->is_404 = false;

Denne kode skal placeres i dit tema eller plugin’s funktioner.php-fil. Ved at angive $wp_query->is_404 til false fortæller du WordPress, at den aktuelle side ikke er en 404-side, og den vil derfor behandle den korrekt som en brugerdefineret rute.

Eksempel på kodestykke


	function filter_template( $template ) {
		global $wp_query;
		$cars = ['audi', 'bmw', 'mercedes'];
		foreach ( $cars as $car ) {
			if ( isset( $wp_query->query['pagename']) and  $wp_query->query['name'] == $model ) {
				$wp_query->is_404 = false;
				$template = __DIR__ . '/single.php';
			}
		}
		return $template;
	}
    I det angivne kodestykke har jeg en funktion kaldet “filter_template”. Funktionen tager imod et template som input og returnerer et modificeret template. Her er en forklaring på, hvad der sker i kodestykket:

  • Jeg definerer en global variabel “$wp_query”, som giver adgang til oplysninger om den aktuelle forespørgsel på siden.
  • Jeg definerer et array med bilmærker (i dette tilfælde [‘audi’, ‘bmw’, ‘mercedes’]), som repræsenterer de bilmærker, du ønsker at arbejde med.
  • Jeg starter en foreach, der itererer gennem hvert bilmærke i arrayet “$cars”.
  • Inde i løkken tjekker jeg, om variablen “$wp_query->query[‘pagename’]” er defineret og om navnet på forespørgslen (“name”) matcher det aktuelle bilmærke (“$car”).
  • Hvis betingelsen er sand, indstiller jeg “$wp_query->is_404” til false, hvilket fortæller WordPress, at den aktuelle side ikke er en 404-side.
  • Jeg ændrer værdien af variablen “$template” til stien “DIR . ‘/single.php'”, hvilket angiver det nye template, der skal bruges.
  • Afslutteligt returnere jeg det modificerede template.

Manipuler posttypen med $wp_query->is_singular = ‘bil’

Hvis du bruger brugerdefinerede ruter i WordPress og ønsker at manipulere hvilken posttype der bliver hentet i din forespørgsel, kan du gøre brug af $wp_query->is_singular = ‘bil’ til at indstille den ønskede posttype til ‘bil’. Dette kan være nyttigt, især hvis du allerede bruger wp core funktionen is_singular(‘bil’) andre steder i din kode.

Ved at manipulere $wp_query->is_singular på denne måde kan du kontrollere, hvilken posttype der håndteres i din brugerdefinerede rute og tilpasse logikken eller outputtet baseret på den pågældende posttype.


$wp_query->is_singular = 'bil';

Her skal du erstatte ‘bil’ med navnet på den ønskede posttype, som du vil hente i din rute. Dette sikrer, at $wp_query er klar over, at forespørgslen er rettet mod en enkeltstående post af typen ‘bil’.

Når man direkte manipulerer $wp_query->is_singular, er der en potentiel risiko for fejl, da det kan påvirke funktionaliteten i wp-includes/general-template.php. Selvom den præcise årsag til denne fejl ikke er blevet undersøgt, valgte jeg i stedet at anvende en alternativ tilgang til data-manipulation ved at bruge funktionen $wp_query->is_post_type_archive = ‘bil’.

Uanset hvad, er formålet at anvende en betingelse i min kode, der sikrer, at relevante ændringer kun implementeres, når jeg arbejder med sider, der har denne betingelse. Dette giver mig mulighed for at foretage specifikke justeringer eller tilpasninger, der kun påvirker dette område, samtidig med at den generelle funktionalitet i andre dele af koden bevares.


$wp_query->is_post_type_archive = 'bil;