La pagina singola del custom post type restituisce errore 404

6 ago 2014, 15:02:01
Visualizzazioni: 57.7K
Voti: 28

Ho un custom post type chiamato slide. Ha contenuto e alcuni campi personalizzati. Voglio che WP mostri il template single.php o single-slide.php quando l'utente clicca sul link della pagina singola dello slide. Il problema è che WP restituisce un errore 404 quando tento di visualizzare la pagina singola dello slide.

Ecco il mio codice in functions.php:

function create_slide_post_type() {
    $labels = array(
        'name'               => _x( 'Slides', 'i2sa' ),
        'singular_name'      => _x( 'Slide', 'i2sa' ),
        'menu_name'          => _x( 'Slides', 'i2sa' ),
        'name_admin_bar'     => _x( 'Slide', 'i2sa' ),
        'add_new'            => _x( 'Aggiungi', 'i2sa' ),
        'add_new_item'       => __( 'Aggiungi nuovo slide', 'i2sa' ),
        'new_item'           => __( 'Nuovo slide', 'i2sa' ),
        'edit_item'          => __( 'Modifica slide', 'i2sa' ),
        'view_item'          => __( 'Visualizza slide', 'i2sa' ),
        'all_items'          => __( 'Tutti gli slide', 'i2sa' ),
        'search_items'       => __( 'Cerca slide', 'i2sa' ),
        'parent_item_colon'  => __( 'Slide genitore:', 'i2sa' ),
        'not_found'          => __( 'Nessuno slide trovato.', 'i2sa' ),
        'not_found_in_trash' => __( 'Nessuno slide trovato nel cestino.', 'i2sa' )
    );

    $args = array(
        'labels'             => $labels,
        'description'        => "Slides dell'azienda 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' );
0
Tutte le risposte alla domanda 4
5
60

Dovresti impostare l'argomento publicly_queryable su true quando registri il tuo custom post type.

NOTA BENE: Aggiungi flush_rewrite_rules(), aggiorna la pagina una o due volte e RIMUOVILO IMMEDIATAMENTE. NON devi mantenere flush_rewrite_rules() a meno che non sia previsto come indicato nel codex.

questa è un'operazione costosa quindi dovrebbe essere usata solo quando strettamente necessario

6 ago 2014 16:20:46
Commenti

Oh wow, ha funzionato anche qui. Non era per niente ovvio. Grazie!

Toby Deshane Toby Deshane
28 gen 2019 21:02:46

Ha funzionato per me! Grazie!

JamesHoux JamesHoux
10 giu 2019 21:58:55

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

Eric Eric
24 lug 2019 16:42:51

flush_rewrite_rules() ha funzionato per me - ottimo suggerimento!

Cush Cush
2 nov 2020 17:13:55

Puoi semplicemente provare ad andare in Impostazioni > Permalink e cliccare salva senza modificare nulla. Se non vuoi modificare il tuo codice e cerchi una soluzione rapida 'si spera'

BonisTech BonisTech
2 dic 2020 12:11:18
3
25

Svuota le regole di riscrittura dal pannello di controllo -> Impostazioni->Pagina dei permalink. Clicca sul pulsante salva e poi controlla la pagina dei dettagli dello slide. Ora dovrebbe funzionare. In alternativa puoi scrivere questo codice flush_rewrite_rules() nella tua funzione create_slide_post_type(). Vedi il Codex

6 ago 2014 15:33:28
Commenti

Fare clic sul pulsante Salva nei Permalink ha funzionato per me. Dopo aver spostato il sito su un server di produzione, tutti i link dei custom post type si interrompevano. Questo ha risolto il problema. Grazie!

cbloss793 cbloss793
11 ott 2017 20:29:02

+1 Anche solo fare clic su Salva nei Permalink ha funzionato per me.

Kalnode Kalnode
12 ago 2018 03:52:19

Salvare i permalink funziona. Ma per favore non aggiungere flush_rewrite_rules() dopo le chiamate a register_post_type() nel codice di produzione (cioè all'interno di create_slide_post_type). Usa l'hook di attivazione del plugin o un valore option per determinare che hai aggiunto un nuovo post type

Philipp Philipp
14 giu 2019 10:31:17
1
11

Aggiorna i tuoi permalink. Vai su Admin->Impostazioni->Permalink e clicca Salva. Questo aggiornerà i tuoi permalink e dovrebbe risolvere il problema, specialmente se stai modificando le regole di riscrittura ( 'rewrite' => array( 'slug' => 'slide' ),)

29 mar 2017 15:00:59
Commenti

funziona per me - grazie

cljk cljk
27 apr 2020 12:48:15
1

Dovresti impostare quanto segue nel tuo virtualhost Apache:

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

Successivamente, aggiorna i tuoi permalink: wp-admin->impostazioni->permalink. Questo metodo ha funzionato per me.

13 nov 2019 18:10:18
Commenti

Grazie per aver pubblicato questa risposta. Ora almeno so che il problema è nella configurazione del mio Apache e non nel codice.

Sharpey Sharpey
14 nov 2021 00:33:17