Cómo crear un tipo de publicación personalizado con un slug de archivo que difiere del nombre del tipo de publicación

3 minutos de lectura

He creado un tipo de publicación llamado listing y una página de archivo adjunta archive-listing.php. Cuando navego a /listings, la página de archivo se carga correctamente. Sin embargo, me gustaría que la URL del archivo fuera /marketplace. estoy definiendo el rewrite propiedad a continuación, pero no parece estar funcionando. ¿Qué me estoy perdiendo?

register_post_type("listing",
    array(
        "menu_icon" => "dashicons-tag",
        "labels" => array(
            "name" => __( "Listings" ),
            "singular_name" => __("Listing")
        ),
        "public" => true,
        "has_archive" => true,
        "rewrite" => array("slug" => "marketplace"),
        "supports" => array("title", "editor"),
        "taxonomies" => array("listing_status")
    )
);

  • Lo estás haciendo de la manera correcta. Ha vaciado las reglas de enlaces permanentes, ¿verdad (una forma sería ir a Configuración -> Enlaces permanentes en el administrador y presionar Guardar)? Eso debe hacerse después de configurar el nuevo slug.

    – Nathan Dawson

    9 de septiembre de 2016 a las 0:43

  • Además del consejo de Nathan Dawson, asegúrese de que no haya ninguna página o publicación con el mismo slug, ya que puede tener prioridad sobre el archivo en las reglas de reescritura. ¿Cuál es el error que estás recibiendo?

    – Pim Schaf

    9 de septiembre de 2016 a las 4:02

  • ¡Gracias! Vaciar las reglas de enlace permanente lo hizo. No me di cuenta de que tenía que hacer eso.

    –David Jones

    9 sep 2016 a las 15:50

  • @NathanDawson si publica su comentario como respuesta, seguiré adelante y seleccionaré su respuesta, ya que usted fue el primero en responder. ¡Gracias!

    –David Jones

    9 sep 2016 a las 15:53

  • @DavidJones – gracias, lo haré

    – Nathan Dawson

    9 sep 2016 a las 16:15

También puedes usar:

'has_archive' => 'marketplace'

De esa manera, el slug de la página de archivo será /marketplace y la página única será /listing

  • esta debería ser la respuesta aceptada … solución simple y efectiva. Gracias !

    – ciclomotor

    14 de julio de 2020 a las 13:43

avatar de usuario
nathan dawson

Cambiar el archivo slug independientemente de las publicaciones individuales

El slug predeterminado para un tipo de publicación personalizada coincidirá con la clave del tipo de publicación (primer argumento de la función). En el ejemplo que publicaste, eso sería listing. Luego pasa a cambiarlo especificando un nuevo slug en reescritura. Sin embargo, eso afectará tanto a la publicación individual como al archivo.

Para configurar el slug de archivo y conservar el slug normal para publicaciones individuales, debe usar has_archive en cambio. has_archive es un nombre engañoso ya que acepta un booleano o una cadena. Establecerlo en verdadero generará la página de archivo. Pasar una cadena en su lugar te permitirá personalizar el slug:

'has_archive' => 'marketplace',

Ejemplo en contexto:

register_post_type( 'listing', [
    'menu_icon' => 'dashicons-tag',
    'labels' => [
        'name' => __( 'Listings' ),
        'singular_name' => __( 'Listing' ),
    ],
    'public' => true,
    'has_archive' => 'marketplace',
    'supports' => [ 'title', 'editor' ],
    'taxonomies' => [ 'listing_status' ],        
]);

Enjuagar enlaces permanentes

Cuando registra un nuevo tipo de publicación personalizada, debe vaciar sus enlaces permanentes.

Para hacer eso, vaya a Configuración -> Enlaces permanentes en el administrador y presione Guardar (no se requieren cambios).

Si está creando algo que se va a distribuir, es posible que desee hacerlo mediante programación. tendrías que correr flush_rewrite_rules() conectándose a la activación del complemento o after_switch_theme acción. La documentación se puede encontrar aquí: https://codex.wordpress.org/Function_Reference/flush_rewrite_rules

Intente actualizar Configuración->Estructura de enlaces permanentes a la predeterminada y luego a %%postname%%

¿Ha sido útil esta solución?