El tipo de publicación personalizada single- {custom} .php no funciona

18

Hice un tipo de publicación personalizada con el nombre de máquina special_media_post y wordpress simplemente no está viendo single-special_media_post.php. Estoy completamente perdido. Sigue por defecto en index.php

Aquí está mi código para mi tipo de publicación personalizada y sus taxonomías:

//Post and Taxonomy stuff
//Register Custom Post Type
function special_media_post() {
$labels = array(
    'name'                => _x( 'Media Posts', 'Post Type General Name', 'text_domain' ),
    'singular_name'       => _x( 'Media Post', 'Post Type Singular Name', 'text_domain' ),
    'menu_name'           => __( 'Media Post', 'text_domain' ),
    'parent_item_colon'   => __( 'Media Post:', 'text_domain' ),
    'all_items'           => __( 'All Media Posts', 'text_domain' ),
    'view_item'           => __( 'View Media Post', 'text_domain' ),
    'add_new_item'        => __( 'Add New Media Post', 'text_domain' ),
    'add_new'             => __( 'New Media Post', 'text_domain' ),
    'edit_item'           => __( 'Edit Media Post', 'text_domain' ),
    'update_item'         => __( 'Update Media Post', 'text_domain' ),
    'search_items'        => __( 'Search Media Posts', 'text_domain' ),
    'not_found'           => __( 'No media posts found', 'text_domain' ),
    'not_found_in_trash'  => __( 'No media posts found in Trash', 'text_domain' ),
);

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

$args = array(
    'label'               => __( 'mediapost', 'text_domain' ),
    'description'         => __( 'Post Type for Media', '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 );
}

// Register Custom Taxonomy
function media_year()  {
$labels = array(
    'name'                       => _x( 'Years', 'Taxonomy General Name', 'text_domain' ),
    'singular_name'              => _x( 'Year', 'Taxonomy Singular Name', 'text_domain' ),
    'menu_name'                  => __( 'Year', 'text_domain' ),
    'all_items'                  => __( 'All Years', 'text_domain' ),
    'parent_item'                => __( 'Parent Year', 'text_domain' ),
    'parent_item_colon'          => __( 'Parent Year:', 'text_domain' ),
    'new_item_name'              => __( 'New Year Name', 'text_domain' ),
    'add_new_item'               => __( 'Add New Year', 'text_domain' ),
    'edit_item'                  => __( 'Edit Year', 'text_domain' ),
    'update_item'                => __( 'Update Year', 'text_domain' ),
    'separate_items_with_commas' => __( 'Separate years with commas', 'text_domain' ),
    'search_items'               => __( 'Search years', 'text_domain' ),
    'add_or_remove_items'        => __( 'Add or remove years', 'text_domain' ),
    'choose_from_most_used'      => __( 'Choose from the most used yearss', '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 );
}

// Register Custom Taxonomy
function media_type()  {
$labels = array(
    'name'                       => _x( 'Types', 'Taxonomy General Name', 'text_domain' ),
    'singular_name'              => _x( 'Type', 'Taxonomy Singular Name', 'text_domain' ),
    'menu_name'                  => __( 'Type', 'text_domain' ),
    'all_items'                  => __( 'All Types', 'text_domain' ),
    'parent_item'                => __( 'Parent Type', 'text_domain' ),
    'parent_item_colon'          => __( 'Parent Type:', 'text_domain' ),
    'new_item_name'              => __( 'New Type Name', 'text_domain' ),
    'add_new_item'               => __( 'Add New Type', 'text_domain' ),
    'edit_item'                  => __( 'Edit Type', 'text_domain' ),
    'update_item'                => __( 'Update Type', 'text_domain' ),
    'separate_items_with_commas' => __( 'Separate types with commas', 'text_domain' ),
    'search_items'               => __( 'Search types', 'text_domain' ),
    'add_or_remove_items'        => __( 'Add or remove types', 'text_domain' ),
    'choose_from_most_used'      => __( 'Choose from the most used types', '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 );
}

// Hook into the 'init' action
add_action( 'init', 'special_media_post', 0 );

// Hook into the 'init' action
add_action( 'init', 'media_year', 0 );

// Hook into the 'init' action
add_action( 'init', 'media_type', 0 );

Si hay algo más que necesita ver, puedo ponerlo, pero ni siquiera lo ve si pongo un eco 'Hola Mundo' allí. Por lo tanto, simplemente no se ve el single-special_media_post.php o el archive-special_media_post.php

BobbyDank
fuente

Respuestas:

57

Visite la página de enlaces permanentes (que lo vaciará) y verifique nuevamente. WordPress probablemente solo necesita ser empujado para reconocer su adición a la jerarquía.

Vancoder
fuente
2
¡Guauu! funciona como encanto, desperdiciado 1 hora :(
Mohammed Sufian
5

Cambiar el código

Desde :

 'has_archive'         => true,

A :

 'has_archive'         => false,

Y luego vaya a la página de enlace permanente, cambie a predeterminado y vuelva a su "enlace permanente"

%Nombre del puesto%/

Ahora debería funcionar.

La razón por la cual no va a la página single- {custom_post_type} .php es por has_archive. Cuando has_archive se establece en verdadero, buscará archive- {custom_post_type} .php en lugar de una sola página.

Espero que esto haya funcionado.

Wesley Cheung
fuente
1
No estoy seguro de que sea verdad. Una vista de publicación única es una vista de publicación única, ya sea que el tipo de publicación admita vistas de índice de archivo o no.
Chip Bennett
Esta solución que publiqué es cómo resolví mi problema en mi tema de desarrollo propio. Cuando mi página de tipo de publicación única ahora me mostraría lo que quería ver.
Wesley Cheung el
3
Es posible que la solución sea restablecer la estructura de enlaces permanentes, que a su vez eliminó las reglas de reescritura.
Chip Bennett
2
la configuración 'has_archive' no tiene ningún efecto sobre si la plantilla single- {post_type} .php se usará para una sola solicitud o no.
Jules
Funciona de maravilla. ¡Gracias, amigo!
user1202416
1

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

Parece que los nuevos tipos de contenido nuevos siempre no se reescribirán. Para evitar esto, ingrese la función de devolución de llamada register_activation_hook () flush_rewrite_rules()y su nuevo contenido de registro. No sé por qué, pero hacer esto parece evitar este problema. Mira:

register_activation_hook( __FILE__, 'your_active_hook' );

function your_active_hook() {
    special_media_post();
    flush_rewrite_rules();
}
danilocgsilva
fuente
0

Copié su código, eliminé las reglas de reescritura a través del administrador y ahora el tema usa las plantillas correctas cuando visito una publicación de medios.

Debe vaciar las reglas de reescritura una vez usando el gancho after_switch_theme. Esto asegurará que las reglas de reescritura se vacíen automáticamente después de que el usuario haya activado el Tema.

Puede usar este código (directamente desde el 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' );

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

EDITAR: en tal caso, el complemento Inspeccionar reescribir reglas es muy útil, ya que le permite ver las reglas conectadas a su tipo de publicación personalizada: http://wordpress.org/extend/plugins/rewrite-rules-inspector/

En una nota al margen, tenga en cuenta también que el lugar recomendado para colocar tipos de publicaciones personalizadas es un complemento, no un tema.

Franco
fuente