J'ai créé un type de publication personnalisé avec le nom de la machine special_media_post et wordpress ne voit tout simplement pas le single-special_media_post.php. Je suis complètement perdu. Il conserve par défaut l'index.php
Voici mon code pour mon type de message personnalisé et ses taxonomies:
//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 );
S'il y a autre chose que vous devez voir, je peux le mettre en place, mais il ne le verra même pas si je mets un écho «Hello World» là-dedans. Il ne s'agit donc tout simplement pas de voir le single-special_media_post.php ou l'archive-special_media_post.php
Changer le code
De :
À :
Et puis allez sur la page de permalien, changez par défaut et revenez à votre "joli permalien"
%après le nom%/
Maintenant ça devrait marcher.
La raison pour laquelle il ne va pas à la page single- {custom_post_type} .php est à cause de has_archive. Lorsque has_archive est défini sur true, il recherchera archive- {custom_post_type} .php au lieu de la page unique.
J'espère que cela a fonctionné.
la source
Il est recommandé d'utiliser également le
register_activation_hook()
etregister_deactivation_hook()
lors de la création de nouveaux types de contenu.Il semble que les nouveaux types de contenu ne pourront toujours pas être réécrits. Pour éviter cela, mettez dans la fonction de rappel register_activation_hook () la fonction
flush_rewrite_rules()
et votre nouveau contenu d'enregistrement. Je ne sais pas pourquoi, mais cela semble éviter ce problème. Regardez:la source
J'ai copié votre code, vidé les règles de réécriture via l'administrateur et maintenant le thème utilise les bons modèles lorsque je visite un article multimédia.
Vous devez vider les règles de réécriture une fois à l'aide du hook after_switch_theme. Cela garantira que les règles de réécriture seront vidées automatiquement après que l'utilisateur a activé le thème.
Vous pouvez utiliser ce code (directement du Codex):
Veuillez consulter le Codex WordPress pour plus d'informations: http://codex.wordpress.org/Function_Reference/register_post_type
EDIT: dans un tel cas, le plugin Inspect Rewrite Rules est très pratique, car il vous permet de voir les règles liées à votre type de publication personnalisé: http://wordpress.org/extend/plugins/rewrite-rules-inspector/
Sur un sidenote, veuillez également noter que l'endroit recommandé pour mettre des types de publication personnalisés est un plugin, pas un thème.
la source