El tipo de publicación personalizada en una sola página devuelve un error 404


17

Tengo un tipo de mensaje personalizado llamado slide. Tiene contenido y algunos campos personalizados. Quiero que WP muestre el single.phptema o el single-slide.phptema cuando el usuario hace clic en el enlace de la página de una diapositiva. El problema que tengo es que WP arroja un error 404, cuando quiero ver la página de una sola diapositiva.

Aquí está mi código 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' );

Respuestas:


41

Debería establecer su publicly_queryableargumento trueal registrar su tipo de publicación personalizada.

TOMA NOTA : Agregue flush_rewrite_rules(), actualice la página una o dos veces y QUITELA INMEDIATAMENTE. NO DEBE guardar a flush_rewrite_rules()menos que se cumplan las disposiciones del códice.

Esta es una operación costosa, por lo que solo debe usarse cuando sea absolutamente necesario


1
Oh wow, eso funcionó aquí también. Eso fue completamente no obvio. ¡Gracias!
Toby Deshane

¡Trabajó para mi! ¡Gracias!
JamesHoux

¡Si! Finalmente después de hacer las dos cosas funcionó.
Eric

16

Vacíe la regla de reescritura del panel de control -> Configuración-> Página de enlace permanente. Haga clic en el botón Guardar y luego consulte la página de detalles de la diapositiva. Funcionará ahora. De lo contrario, puede escribir este código flush_rewrite_rules()en su create_slide_post_type()función. Ver el Codex


2
Hacer clic en el botón Guardar en Permlinks funcionó para mí. Después de mover el sitio a un servidor de producción, todos los enlaces de tipo de publicación personalizada se rompieron. Esto lo solucionó. ¡Gracias!
cbloss793

Hacer clic en Guardar en Permalinks también me funcionó.
MarsAndBack

Guardar los enlaces permanentes funciona. Pero no agregue flush_rewrite_rules()después de las register_post_type()llamadas en el código de producción (es decir, dentro create_slide_post_type). Use el enlace de activación del complemento o un valor de opción para determinar que agregó un nuevo tipo de publicación
Philipp

6

Actualiza tus enlaces permanentes. Vaya a Admin-> Configuración-> Enlaces permanentes y presione Guardar. Actualiza sus enlaces permanentes y debería ayudar, especialmente si está cambiando rewrite ('rewrite' => array ('slug' => 'slide'),)


1

Debe configurar lo siguiente en su virtual host apache:

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

Luego, actualice sus enlaces permanentes: wp-admin-> configuración-> enlaces permanentes. Eso funcionó para mí.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.