La página de archivo de tipo de entrada personalizado no funciona
Estoy tratando de crear un tipo de entrada personalizado. Todo funciona bien excepto la página de archivo. Mi página de archivo de tipo de entrada personalizado es archive-courses.php pero no está funcionando, está mostrando el archivo.php predeterminado. ¿Hay algo mal en mi código?
¿Alguien puede ayudarme, por favor?
function td_courses() {
$labels = array(
'name' => _x( 'Cursos', 'td' ),
'singular_name' => _x( 'Cursos', 'td' ),
'add_new' => _x( 'Añadir Nuevo', 'td' ),
'add_new_item' => __( 'Añadir Nuevo curso' ),
'edit_item' => __( 'Editar curso' ),
'new_item' => __( 'Nuevos cursos' ),
'all_items' => __( 'Cursos' ),
'view_item' => __( 'Ver cursos' ),
'search_items' => __( 'Buscar cursos' ),
'not_found' => __( 'No se encontraron cursos' ),
'not_found_in_trash' => __( 'No se encontraron cursos en la Papelera' ),
'menu_name' => 'Cursos'
);
$args = array(
'labels' => $labels,
'public' => true,
'menu_position' => 10,
'menu_icon' => 'dashicons-welcome-learn-more',
'supports' => array( 'title', 'editor', 'thumbnail', 'author' ),
'has_archive' => true,
'capability_type' => 'page',
'rewrite' => array( 'slug' => 'course' ),
);
register_post_type( 'courses', $args );
}
add_action( 'init', 'td_courses' );
function td_courses_taxonomies() {
$labels = array(
'name' => _x( 'Categorías de Cursos', 'td' ),
'singular_name' => _x( 'Categorías de Cursos', 'td' ),
'search_items' => __( 'Buscar Categoría de Curso' ),
'all_items' => __( 'Todas las Categorías de Cursos' ),
'parent_item' => __( 'Categoría de Curso Padre' ),
'parent_item_colon' => __( 'Categoría de Curso Padre:' ),
'edit_item' => __( 'Editar Categoría de Curso' ),
'update_item' => __( 'Actualizar Categoría de Curso' ),
'add_new_item' => __( 'Añadir Nueva Categoría de Curso' ),
'new_item_name' => __( 'Nombre de Nueva Categoría de Curso' ),
'menu_name' => __( 'Categoría de Curso' ),
);
$args = array(
'hierarchical' => true,
'labels' => $labels,
'show_ui' => true,
'show_admin_column' => true,
'query_var' => true,
'rewrite' => array( 'slug' => 'courses-list' ),
);
register_taxonomy( 'courses_category', array( 'courses' ), $args );
}
add_action( 'init', 'td_courses_taxonomies', 0 );
Gracias

Tu tipo de publicación, courses
, tiene un slug de reescritura de course
. Por lo tanto, tu plantilla de archivo será archive-course.php
.
Tu taxonomía, courses_category
, tiene un slug de reescritura de course
, por lo que tu plantilla de archivo de taxonomía será taxonomy-courses.php
.
Esta jerarquía de plantillas completa puede ser útil.
Si deseas una página de archivo que muestre todos los posts del tipo de publicación courses
en yoursite.com/courses
, deberías asignar al tipo de publicación un slug de reescritura de courses
. (Creo que este es el valor predeterminado ya que tu tipo de publicación es courses
.)
La plantilla de archivo de taxonomía, taxonomy-[slug].php
, se invocará al ver una página de archivo de todos los posts del tipo de publicación courses
asignados a un término de taxonomía específico. Así que si tuvieras un término beginner
, y el slug de reescritura courses
para el término de taxonomía, verías un archivo de cursos para principiantes en yoursite.com/courses/beginner
.
Si asignas el mismo slug de reescritura al tipo de publicación y a la taxonomía, podrías tener algunos conflictos. Pero no estoy seguro.
Como dijo Pieter Goosen, necesitarás vaciar las reglas de reescritura cada vez que hagas cambios como estos.

Realmente ni siquiera revisé los slugs de reescritura cuando revisé el código rápidamente. Con toda probabilidad, el problema es el slug de reescritura. Puedes tener el mismo slug para tu tipo de publicación y taxonomía, pero requeriría bastante trabajo adicional. Recuerdo que respondí una pregunta similar hace un tiempo donde usamos un plugin para solucionar el problema con las reglas de reescritura. En resumen, realmente se debe evitar tener los mismos slugs de reescritura.

Extraño, he cambiado el nombre de mi plantilla de archivo a archive-course.php pero sigo teniendo el mismo problema. También cambié el slug de reescritura de mis taxonomías a courses-list. Pero sin suerte :(

actualiza tu pregunta con lo que tienes ahora, es difícil saber si necesitas usar course
o courses
?

¿Has vuelto a vaciar las reglas de reescritura? Cosas que recomendaría probar: configura archive-course.php
y archive-courses.php
y luego intenta eliminar tus reglas de reescritura para ver dónde termina. Asegúrate de que realmente estás viendo la página correcta (tu etiqueta <body>
debería tener una clase post-type-archive-courses
-- si el tema usa body_class()
correctamente).

Sí. Volví a guardar los enlaces permanentes y tengo la clase body en mi plantilla, está mostrando la lista de clases archive tax-courses_category term-test-1 term-6 logged-in admin-bar hfeed customize-support
También, he creado ambas páginas de archivo archive-courses-list.php, archive-courses.php y archive-course.php pero ninguna funciona

Los nombres de clase que describes se agregan a un archivo de taxonomía que cargará el archivo de plantilla taxonomy-<slug>.php
. Si no ves la clase post-type-archive-courses
en tu etiqueta body, no estás en la página de archivo del tipo de publicación.

Sí. Por fin, está mostrando mi página. taxonomy-courses_category.php esta está funcionando.
Pero todavía estoy confundido, ¿por qué mi archive-courses.php no funciona? Usé este sistema para mostrar mi categoría la última vez. Pero esta vez no hay suerte :(

Según el código que publicaste, la plantilla archive-courses.php
debería mostrarse cuando visitas yoursite.com/course
. Si no es así, probablemente no hayas actualizado correctamente tus reglas de reescritura, o tienes otras reglas que están interfiriendo con las reglas de archivo de tu CPT.

Como dijo Pieter Goosen, necesitas actualizar tus enlaces permanentes cuando creas una nueva taxonomía o tipo de publicación personalizado. Ve a la configuración de tu sitio -> enlaces permanentes y haz clic en el "botón guardar".
Esto solucionó el problema para mí.
