Il tipo di post personalizzato pagina singola restituisce errore 404


17

Ho un tipo di post personalizzato chiamato slide. Ha contenuti e alcuni campi personalizzati. Voglio che WP mostri il single.phptema o il single-slide.phptema quando l'utente fa clic sul collegamento della pagina singola della diapositiva. il problema che ho è che WP genera un errore 404, quando voglio vedere la pagina della singola diapositiva.

ecco il mio codice 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' );

Risposte:


41

Devi impostare il tuo publicly_queryableargomento su truequando registri il tuo tipo di post personalizzato.

NOTA : aggiungere flush_rewrite_rules(), aggiornare la pagina una o due volte e RIMUOVERLA IMMEDIATAMENTE. NON DOVREBBE conservare flush_rewrite_rules()se non secondo le disposizioni come nel codice.

si tratta di un'operazione costosa, quindi dovrebbe essere utilizzata solo quando assolutamente necessario


1
Oh wow, ha funzionato anche qui. Era del tutto ovvio. Grazie!
Toby Deshane,

Ha funzionato per me! Grazie!
JamesHoux,

Sì! Finalmente dopo aver fatto entrambe le cose ha funzionato.
Eric

16

Svuota la regola di riscrittura dalla dashboard -> Impostazioni-> Pagina Permalink. Fare clic sul pulsante Salva e quindi controllare la pagina dei dettagli della diapositiva. Funzionerà ora. Altrimenti puoi scrivere questo codice flush_rewrite_rules()nella tua create_slide_post_type()funzione. Vedi il codice


2
Facendo clic sul pulsante Salva in Permlink ha funzionato per me. Dopo aver spostato il sito su un server di produzione, tutti i collegamenti di tipo post personalizzato erano interrotti. Questo l'ha risolto. Grazie!
cbloss793,

+1 Il solo clic su Salva in Permalink ha funzionato anche per me.
MarsAndBack,

Il salvataggio dei permalink funziona. Ma per favore non aggiungere flush_rewrite_rules()dopo le register_post_type()chiamate nel codice di produzione (cioè all'interno create_slide_post_type). Utilizza l'hook di attivazione plug-in o un valore di opzione per determinare che hai aggiunto un nuovo tipo di post
Philipp

6

Aggiorna i tuoi permalink. Vai su Ammin-> Impostazioni-> Permalink e premi Salva. Aggiorna i tuoi permalink e dovrebbe aiutarti, specialmente se stai cambiando rewrite ('rewrite' => array ('slug' => 'slide'),)


1

È necessario impostare quanto segue nell'apache di virtualhost:

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

Quindi, aggiorna i tuoi permalink: wp-admin-> settings-> permalink. Per me ha funzionato.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.