Niestandardowy typ pojedynczej strony zwraca błąd 404


17

Mam niestandardowy typ postu o nazwie slide. Ma treść i niektóre niestandardowe pola. Chcę, aby WP wyświetlał single.phpmotyw lub single-slide.phpmotyw, gdy użytkownik kliknie łącze pojedynczej strony slajdu. mam problem z tym, że WP zgłasza błąd 404, gdy chcę zobaczyć stronę pojedynczego slajdu.

oto mój kod w 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' );

Odpowiedzi:


41

Powinieneś ustawić swój publicly_queryableargument na truepodczas rejestrowania niestandardowego typu postu.

UWAGA : Dodaj flush_rewrite_rules(), odśwież stronę raz lub dwa razy i NATYCHMIAST JEJ USUŃ. NIE WOLNO przechowywać, flush_rewrite_rules()chyba że zgodnie z postanowieniami jak w kodeksie.

jest to kosztowna operacja, więc należy jej używać tylko wtedy, gdy jest to absolutnie konieczne


1
Och, wow, to też tutaj działało. To było zupełnie nieoczywiste. Dziękuję Ci!
Toby Deshane

Pracował dla mnie! Dzięki!
JamesHoux

Tak! Wreszcie po zrobieniu obu zadziałało.
Eric

16

Opróżnij regułę przepisywania z pulpitu nawigacyjnego -> Ustawienia-> Strona Permalink. Kliknij przycisk Zapisz, a następnie sprawdź stronę szczegółów slajdu. To zadziała teraz. W przeciwnym razie możesz napisać ten kod flush_rewrite_rules()w swojej create_slide_post_type()funkcji. Zobacz kodeks


2
Kliknięcie przycisku Zapisz w Permlinks działało dla mnie. Po przeniesieniu witryny na serwer produkcyjny wszystkie niestandardowe łącza typu post ulegały zerwaniu. To naprawiło to. Dzięki!
cbloss793,

+1 Po prostu kliknięcie opcji Zapisz w Permalinkach również dla mnie zadziałało.
MarsAndBack

Zapisywanie permalinków działa. Ale proszę nie dodawać flush_rewrite_rules()po register_post_type()wywołaniach w kodzie produkcyjnym (tj. W środku create_slide_post_type). Użyj haka aktywującego wtyczkę lub wartości opcji, aby ustalić, że dodałeś nowy typ postu
Philipp

6

Odśwież swoje linki bezpośrednie. Przejdź do Administrator-> Ustawienia-> Permalinki i naciśnij Zapisz. Odświeża twoje permalinki i powinno pomóc, szczególnie jeśli zmieniasz przepisywanie („rewrite” => tablica („slug” => „slide”),)


1

W apache virtualhost powinieneś ustawić następujące ustawienia:

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

Następnie odśwież swoje łącza bezpośrednie: wp-admin-> ustawienia-> łącza bezpośrednie. To działało dla mnie.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.