Une seule page de type de message personnalisé renvoie une erreur 404


17

J'ai un type de message personnalisé appelé slide. Il a du contenu et des champs personnalisés. Je veux que WP affiche le single.phpthème ou le single-slide.phpthème lorsque l'utilisateur clique sur le lien d'une page de diapositive. le problème que j'ai est que WP jette une erreur 404, quand je veux voir la page de diapositive unique.

voici mon code en 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' );

Réponses:


41

Vous devez définir votre publicly_queryableargument truelors de l'enregistrement de votre type de publication personnalisé.

PRENEZ NOTE : Ajoutez flush_rewrite_rules(), actualisez la page une ou deux fois et RETIREZ-LA IMMÉDIATEMENT. Vous NE DEVEZ PAS conserver flush_rewrite_rules()sauf en vertu des dispositions du Codex.

c'est une opération coûteuse, elle ne doit donc être utilisée qu'en cas d'absolue nécessité


1
Oh wow, ça a fonctionné ici aussi. Ce n'était absolument pas évident. Je vous remercie!
Toby Deshane

A travaillé pour moi! Merci!
JamesHoux

Oui! Enfin, après avoir fait les deux, cela a fonctionné.
Eric

16

Rincez la règle de réécriture à partir du tableau de bord -> Paramètres -> Page Lien permanent. Cliquez sur le bouton Enregistrer, puis vérifiez la page des détails de votre diapositive. Cela fonctionnera maintenant. Sinon, vous pouvez écrire ce code flush_rewrite_rules()dans votre create_slide_post_type()fonction. Voir le Codex


2
Cliquer sur le bouton Enregistrer dans Permlinks a fonctionné pour moi. Après avoir déplacé le site vers un serveur de production, tous les liens de type de publication personnalisés se brisaient. Cela l'a corrigé. Merci!
cbloss793

+1 Un simple clic sur Enregistrer dans Permaliens a également fonctionné pour moi.
MarsAndBack

La sauvegarde des permaliens fonctionne. Mais veuillez ne pas ajouter flush_rewrite_rules()après les register_post_type()appels dans le code de production (c'est-à-dire à l'intérieur create_slide_post_type). Utilisez le crochet d'activation du plug-in ou une valeur d'option pour déterminer que vous avez ajouté un nouveau type de message
Philipp

6

Rafraîchissez vos permaliens. Allez dans Admin-> Paramètres-> Permaliens et appuyez sur Enregistrer. Il rafraîchit vos permaliens et devrait vous aider, surtout si vous changez de réécriture ('rewrite' => array ('slug' => 'slide'),)


1

Vous devez définir les éléments suivants dans votre apache virtualhost:

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

Ensuite, actualisez vos permaliens: wp-admin-> settings-> permalinks. Cela a fonctionné pour moi.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.