Ich habe den Post-Typ wie folgt angegeben:
$args = array(
'labels' => $labels,
'public' => true,
'publicly_queryable' => true,
'show_ui' => true,
'show_in_menu' => true,
'query_var' => true,
'rewrite' => array('slug' => 'agences'),
'capability_type' => 'post',
'has_archive' => true,
'hierarchical' => false,
'menu_position' => 5,
'taxonomies' => array('brands', 'country'),
'supports' => array('title', 'editor', 'author', 'thumbnail', 'custom-fields')
);
register_post_type('destinations', $args);
Ursprünglich konnte ich mit single-agences.php
auf eine einzelne Seite dieses Beitragstyps zugreifen, jetzt wird auf 404 umgeleitet.
Ich habe andere Antworten überprüft und festgestellt, dass es ein häufiger Fehler ist, aber andere Antworten konnten dies nicht beheben. Jede Hilfe wird wunderbar sein.
Es lag an einem Plugin "Taxonomie-Basis-Slug entfernen". Es war ein Konflikt mit der Basismenge der CPT- "Ziele". Ich musste add_rewrite_rule
verwenden, um nach Schnecken zu suchen und sie manuell an den richtigen Ort umzuleiten
Neu registriertes CPT zeigt 404, weil die register_post_type()
die Umschreibregeln nicht leert. Es liegt also an Ihnen, ob Sie es manuell oder automatisch tun möchten.
Gehen Sie zu /wp-admin/
, dann zu Einstellungen "Permalinks und drücken Sie einfach die Save Changes Schaltfläche, um die Umschreiberegeln zu löschen.
Sie können die Umschreiberegeln mit der Funktion flush_rewrite_rules()
leeren. Da jedoch register_post_type()
im Hook init
aufgerufen wird, wird es jedes Mal ausgelöst, wenn der Hook init
ausgelöst wird. Das Gleiche sagt der Kodex auch:
Diese Funktion ist nützlich, wenn sie mit benutzerdefinierten Beitragstypen verwendet wird, da sie das automatische Löschen der WordPress-Umschreiberegeln ermöglicht (muss normalerweise für neue benutzerdefinierte Beitragstypen manuell durchgeführt werden). Dies ist jedoch eine teure Operation und sollte nur verwendet werden, wenn dies unbedingt erforderlich ist .
Deshalb ist es besser, das Ding an etwas anzuhängen, das einmal brennt und das nur dann regiert, wenn es nötig ist. Als @ cybmeta hat das schon gezeigt zu dir. Sie können aber auch dem @ bainternet-Ansatz folgen:
/**
* To activate CPT Single page
* @author Bainternet
* @link http://en.bainternet.info/2011/custom-post-type-getting-404-on-permalinks
* ---
*/
$set = get_option( 'post_type_rules_flased_mycpt' );
if ( $set !== true ){
flush_rewrite_rules( false );
update_option( 'post_type_rules_flased_mycpt', true );
}
Er speichert einen Wert in der Tabelle options
nur für Ihren Beitragstyp. Und wenn der Wert nicht vorhanden ist, werden die Umschreiberegeln gelöscht. Wenn es da ist, tut er es nicht.
Aber bitte beachte, dass es tatsächlich jedes Mal einen DB-Aufruf macht (wenn nicht zwischengespeichert). Also würde ich es vorziehen, den Code after_setup_theme
für das Theme oder register_activation_hook
für das Plugin einzuhängen.
Beim Debuggen von Rewrite-Regeln kann ein solches Plugin sehr hilfreich sein: