Type de publication personnalisé single- {custom} .php ne fonctionne pas


18

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

Réponses:


57

Visitez la page des permaliens (qui la videront) et revérifiez. WordPress a probablement juste besoin d'être poussé pour reconnaître votre ajout à la hiérarchie.


2
Hou la la! fonctionne comme un charme, perdu 1 heure :(
Mohammed Sufian

5

Changer le code

De :

 'has_archive'         => true,

À :

 'has_archive'         => false,

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é.


1
Je ne suis pas sûr que ce soit vrai. Une vue de publication unique est une vue de publication unique, que le type de publication prenne en charge les vues d'index d'archive ou non.
Chip Bennett

Cette solution que j'ai publiée est la façon dont j'ai résolu mon problème sur mon thème développé par moi-même. Quand ma page de type de publication unique me montrerait maintenant ce que je voulais voir.
Wesley Cheung

3
Il est possible que le correctif provienne de la réinitialisation de la structure de permalien, qui à son tour a annulé les règles de réécriture.
Chip Bennett

2
la définition de 'has_archive' n'a aucun effet sur le fait que le modèle single- {post_type} .php soit utilisé pour une seule demande.
Jules

Fonctionne comme un charme. Merci mec!
user1202416

1

Il est recommandé d'utiliser également le register_activation_hook()et register_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:

register_activation_hook( __FILE__, 'your_active_hook' );

function your_active_hook() {
    special_media_post();
    flush_rewrite_rules();
}

0

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):

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' );

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.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.