Página de archivo de tipo de entrada personalizada no funciona

15 may 2013, 15:57:20
Vistas: 15.1K
Votos: 2

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',
    ),
    )
);
4
Comentarios

Por favor, publica el código real de registro del tipo de entrada personalizada. Además: ¿qué sucede si configuras los enlaces permanentes a predeterminados (es decir, sin reescrituras) y/o restableces la configuración de enlaces permanentes?

Chip Bennett Chip Bennett
15 may 2013 16:01:21

Añadí el código en la edición, probé con los enlaces permanentes predeterminados y parece que funciona como se esperaba

markyeoj markyeoj
15 may 2013 16:11:10

Tu código parece funcionar bien para mí. Por favor, revisa: http://wordpress.stackexchange.com/q/98995/21376 Creo que esto puede ser un duplicado funcional de ese.

s_ha_dum s_ha_dum
15 may 2013 16:44:53

Al observar el slug de reescritura que configuraste, ¿estás intentando eliminar el prefijo del tipo de publicación para que funcione como páginas? Si es así, esto no funcionará y tendrás que hacer mucho más que ajustar algunas banderas en register_post_type, además de introducir posibles errores que podrían romper el sitio (conflictos de enlaces permanentes entre páginas/categorías y las nuevas URLs del tipo de publicación).

Tom J Nowell Tom J Nowell
15 may 2013 16:45:38
Todas las respuestas a la pregunta 2
5
11

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:

Diferencias entre taxonomía y tipo de entrada

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

15 may 2013 16:53:44
Comentarios

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?

markyeoj markyeoj
15 may 2013 18:26:42

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.

Tom J Nowell Tom J Nowell
15 may 2013 18:58:13

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

markyeoj markyeoj
15 may 2013 19:21:26

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í

Tom J Nowell Tom J Nowell
15 may 2013 19:46:00

Perfecto, gracias @tom por tu paciencia, en este hilo aprendí muchísimo de ti. Muchas gracias.

markyeoj markyeoj
15 may 2013 19:51:44
2
-2

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' );
9 mar 2015 14:37:29
Comentarios

Por favor agrega una explicación a tu respuesta: por qué eso podría resolver el problema?

fuxia fuxia
9 mar 2015 14:38:33

Esto ni siquiera se acerca a responder la pregunta.

TheDeadMedic TheDeadMedic
9 mar 2015 15:49:46