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');
}
}
Schreibe einen Kommentar