Benutzerdefinierte Postseiten geben den Fehler 404 zurück


16

Ich habe einen benutzerdefinierten Beitragstyp namens slide. Es hat Inhalt und einige benutzerdefinierte Felder. Ich möchte, dass WP das single.phpThema oder single-slide.phpThema anzeigt, wenn der Benutzer auf den Link für eine einzelne Seite der Folie klickt. Das Problem, das ich habe, ist, dass WP 404-Fehler auslöst, wenn ich die einzelne Folienseite sehen möchte.

Hier ist mein Code in functions.php:

function create_slide_post_type() {
    $labels = array(
        'name'               => _x( 'اسلایدها', 'i2sa' ),
        'singular_name'      => _x( 'اسلاید', 'i2sa' ),
        'menu_name'          => _x( 'اسلایدها', 'i2sa' ),
        'name_admin_bar'     => _x( 'اسلاید', 'i2sa' ),
        'add_new'            => _x( 'افزودن', 'i2sa' ),
        'add_new_item'       => __( 'افزودن اسلاید جدید', 'i2sa' ),
        'new_item'           => __( 'اسلاید جدید', 'i2sa' ),
        'edit_item'          => __( 'ویرایش اسلاید', 'i2sa' ),
        'view_item'          => __( 'نمایش اسلاید', 'i2sa' ),
        'all_items'          => __( 'همه اسلایدها', 'i2sa' ),
        'search_items'       => __( 'جستجوی اسلایدها', 'i2sa' ),
        'parent_item_colon'  => __( 'اسلایدهای مادر:', 'i2sa' ),
        'not_found'          => __( 'اسلایدی پیدا نشد.', 'i2sa' ),
        'not_found_in_trash' => __( 'اسلایدی در زباله دان پیدا نشد.', 'i2sa' )
    );

    $args = array(
        'labels'             => $labels,
        'description'        => "اسلایدهای شرکت i2sa",
        'public'             => true,
        'exclude_from_search'=> true,
        'publicly_queryable' => false,
        'show_in_nav_menus'  => false,
        'menu_icon'          => 'dashicons-images-alt2',
        'show_ui'            => true,
        'show_in_menu'       => true,
        'query_var'          => true,
        'rewrite'            => array( 'slug' => 'slide' ),
        'capability_type'    => 'post',
        'has_archive'        => true,
        'hierarchical'       => false,
        'menu_position'      => null,
        'supports'           => array( 'title', 'editor', 'thumbnail', 'excerpt' ),
    );
    register_post_type( 'slide', $args );
    flush_rewrite_rules();
}
add_action( 'init', 'create_slide_post_type' );

Antworten:


41

Sie sollten Ihr publicly_queryableArgument auf setzen, truewenn Sie Ihren benutzerdefinierten Beitragstyp registrieren.

HINWEIS : Fügen Sie flush_rewrite_rules()die Seite hinzu, aktualisieren Sie sie ein oder zweimal und ENTFERNEN Sie sie SOFORT. Sie sollten es NICHT behalten, es flush_rewrite_rules()sei denn , dies unterliegt den Bestimmungen des Kodex.

Dies ist eine teure Operation, daher sollte sie nur verwendet werden, wenn dies unbedingt erforderlich ist


1
Oh wow, das hat auch hier funktioniert. Das war völlig unübersehbar. Vielen Dank!
Toby Deshane

Arbeitete für mich! Vielen Dank!
JamesHoux

Ja! Nach beidem klappte es schließlich.
Eric

14

Löschen Sie die Umschreiberegel über das Dashboard -> Einstellungen -> Permalink-Seite. Klicken Sie auf die Schaltfläche Speichern und überprüfen Sie dann die Seite mit den Foliendetails. Es wird jetzt funktionieren. Ansonsten können Sie diesen Code flush_rewrite_rules()in Ihre create_slide_post_type()Funktion schreiben . Siehe den Kodex


2
Das Klicken auf die Schaltfläche Speichern in Permlinks hat bei mir funktioniert. Nachdem ich die Site auf einen Produktionsserver verschoben hatte, brachen alle benutzerdefinierten Links vom Typ "Beitrag". Das hat es behoben. Vielen Dank!
cbloss793

+1 Einfach auf Speichern in Permalinks klicken, hat auch bei mir funktioniert.
MarsAndBack

Das Speichern der Permalinks funktioniert. Aber bitte nicht flush_rewrite_rules()nach register_post_type()Aufrufen im Produktionscode (dh innen create_slide_post_type) hinzufügen . Verwenden Sie den Plugin-Aktivierungs-Hook oder einen Optionswert, um zu bestimmen, dass Sie einen neuen Beitragstyp hinzugefügt haben
Philipp,

6

Aktualisiere deine Permalinks. Gehen Sie zu Admin-> Einstellungen-> Permalinks und klicken Sie auf Speichern. Es aktualisiert Ihre Permalinks und sollte helfen, insbesondere wenn Sie das Umschreiben ändern ('rewrite' => array ('slug' => 'slide'),)


1

Sie sollten in Ihrem virtualhost Apache Folgendes einstellen:

    <Directory /var/www/html/wordpress>
            AllowOverride All
    </Directory>

Aktualisieren Sie dann Ihre Permalinks: wp-admin-> settings-> permalinks. Das hat bei mir funktioniert.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.