¿Reescritura de URL para Custom Post Type?

25 may 2012, 18:47:09
Vistas: 169K
Votos: 42

Configuré un custom post type para mis proyectos de portafolio. La URL principal para esto está ubicada en /projects/

Ahora también configuré la estructura de enlaces permanentes de las entradas de mi blog como /articles/*/. Esto significa que cuando voy a ver un proyecto del portafolio, la URL cambia a /articles/projects/project-name/

Sé que debe haber una manera de reescribir los enlaces permanentes solamente para mi custom post type de proyectos. Pero no estoy familiarizado con la sintaxis para declarar el slug de la URL - ¡agradecería cualquier ayuda que pueda obtener!

0
Todas las respuestas a la pregunta 2
6
66

Cuando registras un tipo de publicación personalizado, debes especificar que la regla de reescritura no debe anteponerse con la estructura de URL existente.

En resumen, esto significa que esta línea en tu llamada a register_post_type:

'rewrite' => array('slug' => 'projects'),

debe convertirse en esto:

'rewrite' => array('slug' => 'projects','with_front' => false),

Para más información, consulta el argumento rewrite en la entrada del codex sobre register_post_type.

Nota: asegúrate de que, después de actualizar el código, vacíes las reglas de reescritura visitando Ajustes > Enlaces permanentes. De lo contrario, seguirás viendo los enlaces antiguos.

25 may 2012 19:29:28
Comentarios

¡brillante, gracias! Solo para aclarar, ¿todo lo que necesito hacer para limpiar las reglas es ir a Configuración->Enlaces permanentes y hacer clic en "Guardar cambios", correcto?

Jake Jake
25 may 2012 21:06:28

Ni siquiera necesitas guardar cambios. Es suficiente con abrir la página de configuración de Enlaces permanentes (es decir, si tu archivo .htaccess tiene permisos de escritura. Si no, presiona guardar cambios y copia manualmente el código que devuelve en tu .htaccess)

0x61696f 0x61696f
25 may 2012 21:09:10

Esto no parece funcionar para mí. Mis publicaciones de proyectos siguen yendo a example.com/projects/title-of-post. También visité la página de Enlaces permanentes. ¿Qué podría estar causando esto? No hay reglas de reescritura en mi htaccess.

Desi Desi
25 ene 2015 15:36:43

¡Guau, gracias, esa era la parte que faltaba! Visitar la página de enlaces permanentes no funcionó, pero simplemente GUARDAR la configuración actual de enlaces permanentes funcionó :)

Alexander Taubenkorb Alexander Taubenkorb
28 feb 2019 14:09:17

Seguí cambiando cosas sin actualizar las reglas de reescritura. ¡Gracias por el consejo!

Tan-007 Tan-007
14 nov 2019 19:03:27

@0x61696f, ya tengo una página llamada proyectos. ¿Puedo usar el mismo nombre para el slug del tipo de entrada personalizada como proyectos?

Naren Verma Naren Verma
26 ene 2022 13:12:16
Mostrar los 1 comentarios restantes
3
18

Tuve este problema literalmente hace 3 días, luego me encontré con una serie en wp.tutsplus.com. Adapté mi propio código para ajustarme mejor a tu pregunta, pero esto es lo que terminé usando después de seguir la serie. También, ten en cuenta que esto no ha sido probado.

// define un tipo de publicación personalizado
function my_custom_post_type() {
    register_post_type('Projects', array(   
       'label' => 'Proyectos','description' => '',
       'public' => true,
       'show_ui' => true,
       'show_in_menu' => true,
       'capability_type' => 'post',
       'hierarchical' => false,
       'publicly_queryable' => true,
       'rewrite' => false,
       'query_var' => true,
       'has_archive' => true,
       'supports' => array('title','editor','excerpt','trackbacks','custom-fields','comments','revisions','thumbnail','author','page-attributes'),
       'taxonomies' => array('category','post_tag'),
       // hay muchos más argumentos disponibles, pero los anteriores son suficientes por ahora
    ));
}

add_action('init', 'my_custom_post_type');

// reescribe el nombre del tipo de publicación personalizado
global $wp_rewrite;
$projects_structure = '/proyectos/%year%/%monthnum%/%day%/%projects%/';
$wp_rewrite->add_rewrite_tag("%projects%", '([^/]+)', "project=");
$wp_rewrite->add_permastruct('projects', $projects_structure, false);

Teóricamente, podrías cambiar lo que quieras en la URL almacenada en la variable $projects_structure, lo que hay ahí es solo lo que terminé usando yo.

¡Buena suerte, y como siempre, asegúrate de volver y contarnos cómo te fue! :)

25 may 2012 19:18:54
Comentarios

Las respuestas que solo contienen enlaces generalmente se consideran poco útiles ya que esos recursos pueden (y probablemente lo harán) dejar de existir en el futuro. Resume el contenido.

chrisguitarguy chrisguitarguy
25 may 2012 19:56:52

Es justo, trabajaré en una revisión adecuada.

cmegown cmegown
25 may 2012 20:16:37

Ahí está, ahora mi respuesta contiene código similar a un código funcional que tengo en un entorno de producción que reescribe exitosamente la URL de un tipo de publicación personalizado. ¡Espero que resulte más útil!

cmegown cmegown
25 may 2012 20:33:47