El archivo single-{custom}.php de tipo de entrada personalizado no funciona

22 abr 2013, 22:30:41
Vistas: 61.6K
Votos: 23

Creé un tipo de entrada personalizado con el nombre especial special_media_post y WordPress simplemente no detecta el archivo single-special_media_post.php. Estoy completamente perdido. Sigue usando por defecto el index.php

Aquí está mi código para mi tipo de entrada personalizado y sus taxonomías:

//Cosas de Entradas y Taxonomías
//Registrar Tipo de Entrada Personalizado 
function special_media_post() {
$labels = array(
    'name'                => _x( 'Entradas de Medios', 'Nombre General del Tipo de Entrada', 'text_domain' ),
    'singular_name'       => _x( 'Entrada de Medio', 'Nombre Singular del Tipo de Entrada', 'text_domain' ),
    'menu_name'           => __( 'Entrada de Medio', 'text_domain' ),
    'parent_item_colon'   => __( 'Entrada de Medio:', 'text_domain' ),
    'all_items'           => __( 'Todas las Entradas de Medios', 'text_domain' ),
    'view_item'           => __( 'Ver Entrada de Medio', 'text_domain' ),
    'add_new_item'        => __( 'Añadir Nueva Entrada de Medio', 'text_domain' ),
    'add_new'             => __( 'Nueva Entrada de Medio', 'text_domain' ),
    'edit_item'           => __( 'Editar Entrada de Medio', 'text_domain' ),
    'update_item'         => __( 'Actualizar Entrada de Medio', 'text_domain' ),
    'search_items'        => __( 'Buscar Entradas de Medios', 'text_domain' ),
    'not_found'           => __( 'No se encontraron entradas de medios', 'text_domain' ),
    'not_found_in_trash'  => __( 'No se encontraron entradas de medios en la Papelera', 'text_domain' ),
);

$rewrite = array(
    'slug'                => 'mediapost',
    'with_front'          => true,
    'pages'               => true,
    'feeds'               => true,
);

$args = array(
    'label'               => __( 'mediapost', 'text_domain' ),
    'description'         => __( 'Tipo de Entrada para Medios', 'text_domain' ),
    'labels'              => $labels,
    'supports'            => array( 'title', 'editor', 'custom-fields', ),
    'taxonomies'          => array( 'year', 'type' ),
    'hierarchical'        => false,
    'public'              => true,
    'show_ui'             => true,
    'show_in_menu'        => true,
    'show_in_nav_menus'   => true,
    'show_in_admin_bar'   => true,
    'menu_position'       => 5,
    'can_export'          => true,
    'has_archive'         => true,
    'exclude_from_search' => false,
    'publicly_queryable'  => true,
    'query_var'           => 'mediapost',
    'rewrite'             => $rewrite,
    'capability_type'     => 'page',
);

register_post_type( 'special_media_post', $args );
}

// Registrar Taxonomía Personalizada
function media_year()  {
$labels = array(
    'name'                       => _x( 'Años', 'Nombre General de Taxonomía', 'text_domain' ),
    'singular_name'              => _x( 'Año', 'Nombre Singular de Taxonomía', 'text_domain' ),
    'menu_name'                  => __( 'Año', 'text_domain' ),
    'all_items'                  => __( 'Todos los Años', 'text_domain' ),
    'parent_item'                => __( 'Año Padre', 'text_domain' ),
    'parent_item_colon'          => __( 'Año Padre:', 'text_domain' ),
    'new_item_name'              => __( 'Nombre del Nuevo Año', 'text_domain' ),
    'add_new_item'               => __( 'Añadir Nuevo Año', 'text_domain' ),
    'edit_item'                  => __( 'Editar Año', 'text_domain' ),
    'update_item'                => __( 'Actualizar Año', 'text_domain' ),
    'separate_items_with_commas' => __( 'Separar años con comas', 'text_domain' ),
    'search_items'               => __( 'Buscar años', 'text_domain' ),
    'add_or_remove_items'        => __( 'Añadir o eliminar años', 'text_domain' ),
    'choose_from_most_used'      => __( 'Elegir entre los años más usados', 'text_domain' ),
);

$rewrite = array(
    'slug'                       => 'year',
    'with_front'                 => true,
    'hierarchical'               => true,
);

$capabilities = array(
    'manage_terms'               => 'manage_categories',
    'edit_terms'                 => 'manage_categories',
    'delete_terms'               => 'manage_categories',
    'assign_terms'               => 'edit_posts',
);

$args = array(
    'labels'                     => $labels,
    'hierarchical'               => true,
    'public'                     => true,
    'show_ui'                    => true,
    'show_admin_column'          => true,
    'show_in_nav_menus'          => true,
    'show_tagcloud'              => true,
    'query_var'                  => 'year',
    'rewrite'                    => $rewrite,
    'capabilities'               => $capabilities,
);

register_taxonomy( 'year', 'special_media_post', $args );
}

// Registrar Taxonomía Personalizada
function media_type()  {
$labels = array(
    'name'                       => _x( 'Tipos', 'Nombre General de Taxonomía', 'text_domain' ),
    'singular_name'              => _x( 'Tipo', 'Nombre Singular de Taxonomía', 'text_domain' ),
    'menu_name'                  => __( 'Tipo', 'text_domain' ),
    'all_items'                  => __( 'Todos los Tipos', 'text_domain' ),
    'parent_item'                => __( 'Tipo Padre', 'text_domain' ),
    'parent_item_colon'          => __( 'Tipo Padre:', 'text_domain' ),
    'new_item_name'              => __( 'Nombre del Nuevo Tipo', 'text_domain' ),
    'add_new_item'               => __( 'Añadir Nuevo Tipo', 'text_domain' ),
    'edit_item'                  => __( 'Editar Tipo', 'text_domain' ),
    'update_item'                => __( 'Actualizar Tipo', 'text_domain' ),
    'separate_items_with_commas' => __( 'Separar tipos con comas', 'text_domain' ),
    'search_items'               => __( 'Buscar tipos', 'text_domain' ),
    'add_or_remove_items'        => __( 'Añadir o eliminar tipos', 'text_domain' ),
    'choose_from_most_used'      => __( 'Elegir entre los tipos más usados', 'text_domain' ),
);

$rewrite = array(
    'slug'                       => 'type',
    'with_front'                 => true,
    'hierarchical'               => true,
);

$capabilities = array(
    'manage_terms'               => 'manage_categories',
    'edit_terms'                 => 'manage_categories',
    'delete_terms'               => 'manage_categories',
    'assign_terms'               => 'edit_posts',
);

$args = array(
    'labels'                     => $labels,
    'hierarchical'               => true,
    'public'                     => true,
    'show_ui'                    => true,
    'show_admin_column'          => true,
    'show_in_nav_menus'          => true,
    'show_tagcloud'              => true,
    'query_var'                  => 'media_type',
    'rewrite'                    => $rewrite,
    'capabilities'               => $capabilities,
);

register_taxonomy( 'type', 'special_media_post', $args );
}

// Conectar a la acción 'init'
add_action( 'init', 'special_media_post', 0 );

// Conectar a la acción 'init'
add_action( 'init', 'media_year', 0 );

// Conectar a la acción 'init'
add_action( 'init', 'media_type', 0 );

Si hay algo más que necesites ver, puedo mostrarlo, pero ni siquiera lo detecta si pongo un echo 'Hello World' allí. Así que simplemente no está viendo ni el single-special_media_post.php ni el archive-special_media_post.php

0
Todas las respuestas a la pregunta 4
3
75

Visita la página de enlaces permanentes (lo cual lo actualizará) y verifica nuevamente. Probablemente WordPress solo necesita un pequeño empujón para reconocer tu adición a la jerarquía.

22 abr 2013 23:53:29
Comentarios

¡Guau! Funciona de maravilla, perdí 1 hora :(

Mohammed Sufian Mohammed Sufian
22 sept 2016 13:05:16

También perdí una hora, ¡gracias!

Ted Whitehead Ted Whitehead
8 abr 2020 18:38:21

Sí, una hora perdida. Bueno. A lo siguiente.

bwoogie bwoogie
28 abr 2020 20:33:59
6

Cambia el código

De :

 'has_archive'         => true,

A :

 'has_archive'         => false,

Y luego ve a la página de enlaces permanentes, cambia a predeterminado y vuelve a tu "enlace permanente bonito"

%postname%/

Ahora debería funcionar.

La razón por la que no va a la página single-{custom_post_type}.php es por el has_archive. Cuando has_archive está configurado en true buscará archive-{custom_post_type}.php en lugar de la página single.

Espero que esto haya funcionado.

23 abr 2013 16:06:31
Comentarios

No estoy seguro de que eso sea cierto. Una vista de publicación única es una vista de publicación única, independientemente de que el tipo de publicación admita vistas de índice de archivo o no.

Chip Bennett Chip Bennett
23 abr 2013 16:07:56

Esta solución que publiqué es cómo resolví mi problema en mi tema desarrollado por mí mismo. Cuando mi página de tipo de publicación única no me mostraba lo que quería ver.

Wesley Cheung Wesley Cheung
23 abr 2013 16:12:11

Es posible que la solución provenga de restablecer la estructura de enlaces permanentes, lo que a su vez reinició las reglas de reescritura.

Chip Bennett Chip Bennett
23 abr 2013 16:18:05

la configuración 'has_archive' no tiene efecto sobre si la plantilla single-{post_type}.php se utilizará para una solicitud individual.

Jules Jules
18 ene 2018 16:07:42

Funciona perfectamente. ¡Gracias, compañero!

user1202416 user1202416
30 ago 2019 23:18:35

@Jules - Quizás no debería, pero DEFINITIVAMENTE lo hace.

dgo dgo
29 jun 2022 00:43:34
Mostrar los 1 comentarios restantes
0

Copié tu código, limpié las reglas de reescritura a través del Admin y ahora el Tema usa las plantillas correctas cuando visito una Publicación de Medios.

Necesitas limpiar las reglas de reescritura una vez usando el hook after_switch_theme. Esto asegurará que las reglas de reescritura se limpien automáticamente después de que el usuario active el Tema.

Puedes usar este código (directo del Codex):

add_action( 'init', 'theme_prefix_cpt_init' );
function theme_prefix_cpt_init() {
    register_post_type( ... );
}

function theme_prefix_rewrite_flush() {
    flush_rewrite_rules();
}
add_action( 'after_switch_theme', 'theme_prefix_rewrite_flush' );

Por favor consulta el Codex de WordPress para más información: http://codex.wordpress.org/Function_Reference/register_post_type

EDIT: En tal caso, el Plugin Inspect Rewrite Rules es muy útil, porque te permite ver las reglas conectadas a tu tipo de contenido personalizado: http://wordpress.org/extend/plugins/rewrite-rules-inspector/

Como nota adicional, ten en cuenta que el lugar recomendado para poner Tipos de Contenido Personalizados es un Plugin, no un Tema.

23 abr 2013 17:58:53
0

También es una buena práctica usar register_activation_hook() y register_deactivation_hook() al crear nuevos tipos de contenido.

Parece que los tipos de contenido recién creados siempre fallan al intentar reescribir las reglas. Para evitar esto, coloca en el callback de register_activation_hook() la función flush_rewrite_rules() junto con tu función de registro de nuevo contenido. No sé exactamente por qué, pero hacer esto parece evitar el problema. Mira:

register_activation_hook( __FILE__, 'your_active_hook' );

function your_active_hook() {
    special_media_post();
    flush_rewrite_rules();
}
22 ago 2017 14:36:27