webentwicklung-frage-antwort-db.com.de

Einzelne benutzerdefinierte Beitragstyp-Seite, die zur 404-Seite umleitet

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.

4
Deepak jha

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

0
Deepak jha

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.

Manuell:

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.

Automatisch:

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.

Bonus

Beim Debuggen von Rewrite-Regeln kann ein solches Plugin sehr hilfreich sein:

11
Mayeenul Islam