Problemlösung: „404 Fehler auf Vorschau von Custom Post Types im Status „Entwurf“ in WordPress“

z01 0086
Foto von Gabriele Lässer

Veim Preview auf den Entwurf eines Custom Post Types „course“ kam es zu einem 404-Fehler. War ein Course veröffentlicht, konnte man ihn normal aufrufen. – Der Slug des Post Types wurde übersetzt, und ich fragte die KI (MaxAI.me), ob es daran liegen könnte.

Hier was der KI dazu alles „einfiel“ (was man üblicherweise auch in vielen Foren zu lesen bekommt)

  • Flush Permalinks: Manchmal werden die Permalink-Einstellungen nicht korrekt angewendet, besonders nach dem Erstellen eines neuen Custom Post Types oder Änderungen an seinen Slugs. Gehe in WordPress zu „Einstellungen“ > „Permalinks“ und klicke einfach „Änderungen speichern“. Dadurch werden die Permalinks neu aufgebaut.
  • Überprüfung der Übersetzungen: Stelle sicher, dass die Übersetzung des Slugs korrekt ist. Wenn die übersetzten Slugs nicht richtig registriert sind oder es Konflikte gibt (zum Beispiel gleiche Slugs für unterschiedliche Post Types), kann das zu Fehlern führen.
  • Überprüfe den Code: Wenn du den Custom Post Type im Code registriert hast, überprüfe, ob die Argumente publicly_queryable und rewrite korrekt gesetzt sind. publicly_queryable sollte auf true gesetzt sein, und der rewrite-Parameter sollte korrekt konfiguriert sein, möglicherweise mit ‚with_front‘ => false, um Probleme mit den Basis-Permalink-Einstellungen zu vermeiden.
'publicly_queryable' => true,
'rewrite' => array('slug' => 'dein-slug', 'with_front' => false),
  • Überprüfung auf Plugin-Konflikte: Es ist möglich, dass ein SEO-Plugin oder ein Übersetzungsplugin die Permalink-Struktur stört. Deaktiviere solche Plugins testweise, um zu sehen, ob das Problem dadurch behoben wird.
  • Überprüfung auf Theme- oder Plugin-Code Probleme: Wenn du einen Code in deinem Theme oder einem Plugin hast, der Custom Post Types oder Rewrites beeinflusst, stelle sicher, dass dieser korrekt funktioniert. Ein nicht korrekt funktionierender pre_get_posts-Action-Hook könnte zum Beispiel Preview-Anfragen beeinflussen.
  • Debugging: Aktiviere das Debugging in WordPress, indem du die WP_DEBUG-Konstante in der wp-config.php setzt. So können weitere Fehlermeldungen angezeigt werden, die dir helfen, das Problem zu identifizieren.
define('WP_DEBUG', true);
  • Prüfung der Nutzerrolle: Stellen sicher, dass deine Nutzerrolle die entsprechenden Rechte hat, um den Entwurf anzusehen.
  • Konsultation der Dokumentation: Eventuell gibt es etwas Spezielles zu beachten, wenn der Post Type Slug sprachspezifisch übersetzt wird, was in der Dokumentation des Plugins oder Tools, das du zur Übersetzung verwendest, beschrieben sein könnte.

Im Code fand ich tatsächlich ein pre_get_posts – Snippet das ursächlich für den 404-Fehler beim Preview war.

function change_course_order($query)
	{
		if (!is_admin() && $query->is_main_query() && $query->get('post_type') === 'course') {
			$query->set('meta_key', 'prefix_startdate');
			$query->set('orderby', 'meta_value_num');
			$query->set('post_status', array('publish'));
			$query->set('order', 'ASC');
		}
	}

Die Funktion ändert die Sortierreihenfolge der Beiträge vom Typ ‚course‘ . Diese Änderung tritt allerdings nur auf, wenn die Abfrage das Haupt-Query-Objekt ist und nicht im WordPress-Adminbereich stattfindet.

Die Bedingung !is_admin() schließt Admin-Anfragen aus, was in Ordnung ist, denn Vorschaubeiträge sind in der Regel für den Front-End-Bereich.

Die Bedingung $query->is_main_query() stellt sicher, dass nur die Hauptabfrage modifiziert wird. Das ist wichtig, um nicht versehentlich andere Abfragen wie Widgets oder Navigation Menüs zu beeinflussen.

Der Part post_status war auf ‚publish‘ gesetzt. Das war die Ursache, da Vorschaubeiträge den Status ‚draft‘ oder ‚pending‘ haben können. Vorschaubeiträge sind keine veröffentlichten Beiträge und würden somit von dieser Abfrage ausgeschlossen.

Mit nachfolgender Modifikation funktionierte der Preview für Entwürfe.

function change_course_order($query)
	{
		if (!is_admin() && $query->is_main_query() && $query->get('post_type') === 'course') {
			$query->set('meta_key', 'prefix_startdate');
			$query->set('orderby', 'meta_value_num');
			if (!$query->is_preview()) {
				$query->set('post_status', array('publish'));
			}
			$query->set('order', 'ASC');
		}
	}

2 Antworten zu „Problemlösung: „404 Fehler auf Vorschau von Custom Post Types im Status „Entwurf“ in WordPress““

  1. Torsten Landsiedel

    Gehe in WordPress zu „Einstellungen“ > „Permalinks“ und klicke einfach „Änderungen speichern“. Dadurch werden die Permalinks neu aufgebaut.

    Es wird so häufig wiederholt, dass die KI dies tatsächlich „denkt“. Es reicht aber bereits das Aufrufen der Seite Einstellungen -> Permalinks um die Rewrite Rules zu flushen. Ein Speichern ist gar nicht nötig 😉

    1. webentwicklerinat

      dass die KI denkt. davon gehe ich nicht aus. was sie ausgibt, ist noch weit von tatsächlicher kognition entfernt. das reine flushen der rewrite rules reichte jedenfalls nicht aus, die modifkation löste das problem erst.

Bitte Kommentarfunktion nicht für Supportanfragen nutzen. Dem kann hier nicht entsprochen werden. Die Angabe einer E-Mail-Adresse und eines Namens ist nicht erforderlich. Einen (Spitz)-Namen zu nennen wäre aber doch nett.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Hinweis: Sowohl angegebener Name als auch E-Mail-Adresse (beides ist optional, dafür werden alle Kommentare vor Veröffentlichung geprüft) werden dauerhaft gespeichert. Du kannst jeder Zeit die Löschung Deiner Daten oder / und Kommentare einfordern, direkt über dieses Formular (wird nicht veröffentlicht, und im Anschluss gelöscht), und ich werde das umgehend erledigen. – Mit hinterlassenen Kommentaren hinterlegte IP-Adressen werden nach zwei Monaten automatisch gelöscht

publicly queryable