Página de archivo de tipo de entrada personalizada no funciona
Registré un tipo de entrada personalizada usando Custom Post Type UI, y creé una página de archivo llamada archive-recipe.php, 'recipe' es el nombre de mi tipo de entrada personalizada. Pero no funciona, en su lugar está usando el archivo por defecto archive.php
. Establecí has-archive
como true
pero aún no funciona. ¿Cómo solucionar esto?
Aquí está el código:
register_post_type(
'recipe', array(
'label' => 'Receta',
'description' => 'Este es un tipo de entrada personalizada para Recetas',
'public' => true,
'show_ui' => true,
'show_in_menu' => true,
'capability_type' => 'post',
'hierarchical' => true,
'rewrite' => array('slug' => ''),
'query_var' => true,
'has_archive' => true,
'exclude_from_search' => false,
'supports' => array('title','editor','excerpt','trackbacks','custom-fields','comments','revisions','thumbnail','author','page-attributes',),
'labels' => array (
'name' => 'Recetas',
'singular_name' => 'Receta',
'menu_name' => 'Recetas',
'add_new' => 'Agregar Receta',
'add_new_item' => 'Agregar Nueva Receta',
'edit' => 'Editar',
'edit_item' => 'Editar Receta',
'new_item' => 'Nueva Receta',
'view' => 'Ver Receta',
'view_item' => 'Ver Receta',
'search_items' => 'Buscar Recetas',
'not_found' => 'No se encontraron Recetas',
'not_found_in_trash' => 'No hay Recetas en la Papelera',
'parent' => 'Receta Padre',
),
)
);
Dado el registro estándar, deberías tener lo siguiente:
- Un tipo de entrada con el nombre 'recipe'
- Un archivo de entradas de recetas en ejemplo.com/recipe/
- Entradas de recetas con URLs que siguen la forma ejemplo.com/recipe/recetademundohola/
- Una plantilla
archive-recipe.php
- Una plantilla
single-recipe.php
Sin embargo, veo esto en tu código de registro:
'rewrite' => array('slug' => ''),
Esto sugiere que lo que intentas hacer es eliminar el prefijo 'recipe' de las URLs de recetas. El resultado de esto es que tu archivo de entradas de recetas ahora es:
URL del sitio + ''
Que ya está ocupado por la página de inicio, por lo que tu archivo de entradas es imposible de acceder.
Además de esto, en realidad no hace lo que crees. No puedes cambiar un tipo de entrada personalizado para que no tenga la parte '/recipe/' en sus URLs usando únicamente los parámetros de reescritura de register_post_type. Necesitas hacer otros cambios, que también introducen errores potencialmente graves para el sitio.
Por ejemplo, si tienes una página llamada 'calabaza' y una receta llamada 'calabaza', ¿cómo debe saber WordPress cuál cargar cuando se visita ejemplo.com/calabaza? No lo sabe, por lo que cargará la primera regla de reescritura que encuentre.
Así que si tienes una receta para pastel, pero no hay una página llamada pastel, y busca la página y no la encuentra, no obtienes la receta, obtienes un error 404.
Por lo tanto, te recomiendo encarecidamente que abandones tu intento. Hace que tus URLs tengan menos sentido, y a pesar de lo que dicen los "expertos" en SEO, es más probable que dañe, no que ayude, tu posicionamiento en los motores de búsqueda si es que hace algo (es muy probable que no haga absolutamente nada para ayudarte).
Así que elimina el parámetro rewrite y vuelve a guardar tus enlaces permanentes.
Actualización
Después de que publicaste este enlace:
http://seemynewwebsite.com/g2bm/recipecategory/appetizers/
Ahora está claro que estás cargando una taxonomía y esperando un archivo de tipo de entrada. Una taxonomía no es un tipo de entrada, como puedes ver aquí, no comparten los mismos respaldos:
Además, no tiene sentido que lo hicieran. Por ejemplo, ¿qué plantilla de archivo de tipo de entrada se usaría en estos escenarios:
- Una taxonomía que contiene 2 tipos de entrada, personas y ubicaciones. ¿Usaría archive-location.php o archive-people.php?
- Una taxonomía de usuario, referente a usuarios, no a entradas
Así que en su lugar, usa una plantilla de taxonomía para tu taxonomía, no una plantilla de archivo de tipo de entrada. En este caso taxonomy-recipecategry.php

Gracias, buena mejora, la receta ahora muestra los posts, el anterior daba 404.. pero todavía estoy confundido con esto, en realidad pensé que si veía la categoría individual ejemplo, usaría el archive-recipe.php que creé, pero en su lugar sigue usando archive.php. ¿Qué está mal con eso?

Aaaaah, archive-recipe.php es para un archivo de posts, eso no es un archivo de posts, es un listado de taxonomía, necesitas una plantilla de taxonomía.

gracias, creé el taxonomy-recipe.php pero todavía no funciona, sigue usando archive.php..

Tu taxonomía no se llama "recipe", recipe es un post type no una taxonomía. taxonomy-taxonomyname.php
, el tipo de post que lista una taxonomía es completamente irrelevante aquí

Añade este filtro a tu archivo functions.php:
function namespace_add_custom_types( $query ) {
if( is_category() || is_tag() && empty( $query->query_vars['suppress_filters'] ) ) {
$query->set( 'post_type', array(
'post', 'nav_menu_item', 'tu-tipo-de-post-personalizado-aqui'
));
return $query;
}
}
add_filter( 'pre_get_posts', 'namespace_add_custom_types' );
