La Taxonomía Personalizada Lleva a Página 404 - Estructura de Enlaces Permanentes Actualizada
Tengo un CPT (Custom Post Type):
function CPT_init(){
register_post_type('custcpt', array(
'labels' => array(
'name' => __('Productos'),
'singular_name' => __('Producto'),
'all_items' => __('Ver Productos'),
'add_new' => __('Nuevo Producto'),
'add_new_item' => __('Nuevo Producto'),
'edit_item' => __('Editar Producto'),
'view_item' => __('Ver Producto'),
'search_items' => __('Buscar Productos'),
'no_found' => __('No se encontraron Productos'),
'not_found_in_trash' => __('No hay Productos en la Papelera')
),
'public' => true,
'publicly_queryable'=> true,
'show_ui' => true,
'query_var' => true,
'show_in_nav_menus' => false,
'capability_type' => 'post',
'hierarchical' => false,
'rewrite' => array('slug' => '/products/', 'with_front' => false),
'menu_position' => 21,
'supports' => array('title','editor', 'thumbnail'),
'has_archive' => true
));
}
add_action('init', 'CPT_init');
Y una Taxonomía con mi CPT:
function custcpt_category_taxonomy() {
$labels = array(
'name' => __( 'Categorías de Productos' ),
'singular_name' => __( 'Categoría de Producto' ),
'search_items' => __( 'Buscar Categorías de Productos' ),
'all_items' => __( 'Todas las Categorías de Productos' ),
'parent_item' => __( 'Categoría de Producto Padre' ),
'parent_item_colon' => __( 'Categoría de Producto Padre:' ),
'edit_item' => __( 'Editar Categoría de Producto' ),
'update_item' => __( 'Actualizar Categoría de Producto' ),
'add_new_item' => __( 'Añadir Nueva Categoría de Producto' ),
'new_item_name' => __( 'Nueva Categoría de Producto' ),
'menu_name' => __( 'Categorías de Productos' ),
);
$args = array(
'labels' => $labels,
'public' => true,
'hierarchical' => true,
'show_in_nav_menus' => true,
'has_archive' => true,
'rewrite' => array('slug' => '/products/', 'with_front' => false),
);
register_taxonomy( 'custtax', 'custcpt', $args );
}
add_action( 'init', 'custcpt_category_taxonomy');
Tengo una página de productos /products/
y una plantilla de taxonomía: taxonomy-custtax.php
, he probado con taxonomy.php
pero no pareció importar. He actualizado mis enlaces permanentes probablemente 15-20 veces hasta ahora. Funciona bien con la estructura predeterminada pero no con %postname%
. He añadido esto encima de mi taxonomía:
function custom_taxonomy_flush_rewrite() {
global $wp_rewrite;
$wp_rewrite->flush_rules();
}
add_action('init', 'custom_taxonomy_flush_rewrite');
Así que cuando voy a http://www.mywebsite.com/products/term
obtengo un 404 por alguna razón. Juro que la taxonomía siempre me da problemas, cada. vez. única.

Elimina las barras inclinadas en tu slug de reescritura. Debería ser así:
...
'rewrite' => array('slug' => 'products', 'with_front' => false)
...
Además, no puedes tener el mismo slug para una taxonomía y un tipo de entrada personalizado. Necesitan ser únicos, de lo contrario WP no sabrá a cuál corresponde cada uno.
También, si tienes el slug de tu tipo de entrada personalizado como products
, no puedes tener una página con el slug products
al mismo tiempo, ya que causaría conflictos.
Finalmente, para un listado de taxonomía personalizada de estos, el archivo debe titularse taxonomy-{taxonomy_name}.php
, así que en tu caso, debería ser taxonomy-custtax.php
.
Para mejores resultados, te sugiero seguir estos pasos:
Primero, configura el tipo de entrada personalizado. Luego, si estableces el slug como products
(después de actualizar las reglas de reescritura), visita www.misitio.com/products (nuevamente, asegúrate de que nada más en tu instalación tenga un slug de products). Deberías ver un listado de tus productos (asumiendo que has añadido algunas entradas de productos).
Después, añade tu archivo archive-custcpt.php
a tu tema, modifícalo de alguna manera única y actualiza. Deberías ver que ahora carga tu listado de productos dentro de esa nueva plantilla.
Luego, añade tu taxonomía personalizada. Si el slug de tu taxonomía es prodcat
(para categoría de productos), deberías poder visitar www.misitio.com/prodcat/[término] (donde [término] = una categoría de producto que hayas configurado).
Por último, añade tu archivo taxonomy-custtax.php
, modifícalo de alguna manera única y actualiza. Deberías ver el listado mostrándose en tu nueva plantilla.

Elimina la "/" tanto del slug y crea un archivo taxonomy-custtax.php
para que funcione correctamente.
Estoy citando tu código a continuación con las correcciones:
function CPT_init(){
register_post_type('custcpt', array(
'labels' => array(
'name' => __('Productos'),
'singular_name' => __('Producto'),
'all_items' => __('Ver Productos'),
'add_new' => __('Nuevo Producto'),
'add_new_item' => __('Nuevo Producto'),
'edit_item' => __('Editar Producto'),
'view_item' => __('Ver Producto'),
'search_items' => __('Buscar Productos'),
'no_found' => __('No se encontraron productos'),
'not_found_in_trash' => __('No hay productos en la papelera')
),
'public' => true,
'publicly_queryable'=> true,
'show_ui' => true,
'query_var' => true,
'show_in_nav_menus' => false,
'capability_type' => 'post',
'hierarchical' => false,
'rewrite' => array('slug' => 'productos', 'with_front' => false),
'menu_position' => 21,
'supports' => array('title','editor', 'thumbnail'),
'has_archive' => true
));
}
add_action('init', 'CPT_init');
function custcpt_category_taxonomy() {
$labels = array(
'name' => __( 'Categorías de Productos' ),
'singular_name' => __( 'Categoría de Producto' ),
'search_items' => __( 'Buscar Categorías de Productos' ),
'all_items' => __( 'Todas las Categorías de Productos' ),
'parent_item' => __( 'Categoría Padre de Producto' ),
'parent_item_colon' => __( 'Categoría Padre de Producto:' ),
'edit_item' => __( 'Editar Categoría de Producto' ),
'update_item' => __( 'Actualizar Categoría de Producto' ),
'add_new_item' => __( 'Añadir Nueva Categoría de Producto' ),
'new_item_name' => __( 'Nueva Categoría de Producto' ),
'menu_name' => __( 'Categorías de Productos' ),
);
$args = array(
'labels' => $labels,
'public' => true,
'hierarchical' => true,
'show_in_nav_menus' => true,
'has_archive' => true,
'rewrite' => array('slug' => 'productos', 'with_front' => false),
);
register_taxonomy( 'custtax', 'custcpt', $args );
}
add_action( 'init', 'custcpt_category_taxonomy');
