Șablonul single-{custom}.php pentru tipul de postare personalizat nu funcționează
Am creat un tip de postare personalizat cu numele special_media_post și WordPress pur și simplu nu vede fișierul single-special_media_post.php. Sunt complet nedumerit. Continuă să folosească implicit index.php
Iată codul meu pentru tipul de postare personalizat și taxonomiile sale:
//Post și chestiuni legate de Taxonomie
//Înregistrare Tip Postare Personalizat
function special_media_post() {
$labels = array(
'name' => _x( 'Postări Media', 'Nume General Tip Postare', 'text_domain' ),
'singular_name' => _x( 'Postare Media', 'Nume Singular Tip Postare', 'text_domain' ),
'menu_name' => __( 'Postare Media', 'text_domain' ),
'parent_item_colon' => __( 'Postare Media:', 'text_domain' ),
'all_items' => __( 'Toate Postările Media', 'text_domain' ),
'view_item' => __( 'Vezi Postare Media', 'text_domain' ),
'add_new_item' => __( 'Adaugă Postare Media Nouă', 'text_domain' ),
'add_new' => __( 'Postare Media Nouă', 'text_domain' ),
'edit_item' => __( 'Editează Postare Media', 'text_domain' ),
'update_item' => __( 'Actualizează Postare Media', 'text_domain' ),
'search_items' => __( 'Caută Postări Media', 'text_domain' ),
'not_found' => __( 'Nu s-au găsit postări media', 'text_domain' ),
'not_found_in_trash' => __( 'Nu s-au găsit postări media în Coș', 'text_domain' ),
);
$rewrite = array(
'slug' => 'mediapost',
'with_front' => true,
'pages' => true,
'feeds' => true,
);
$args = array(
'label' => __( 'mediapost', 'text_domain' ),
'description' => __( 'Tip Postare pentru 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 );
}
// Înregistrare Taxonomie Personalizată
function media_year() {
$labels = array(
'name' => _x( 'Ani', 'Nume General Taxonomie', 'text_domain' ),
'singular_name' => _x( 'An', 'Nume Singular Taxonomie', 'text_domain' ),
'menu_name' => __( 'An', 'text_domain' ),
'all_items' => __( 'Toți Anii', 'text_domain' ),
'parent_item' => __( 'An Părinte', 'text_domain' ),
'parent_item_colon' => __( 'An Părinte:', 'text_domain' ),
'new_item_name' => __( 'Nume An Nou', 'text_domain' ),
'add_new_item' => __( 'Adaugă An Nou', 'text_domain' ),
'edit_item' => __( 'Editează An', 'text_domain' ),
'update_item' => __( 'Actualizează An', 'text_domain' ),
'separate_items_with_commas' => __( 'Separă anii cu virgule', 'text_domain' ),
'search_items' => __( 'Caută ani', 'text_domain' ),
'add_or_remove_items' => __( 'Adaugă sau șterge ani', 'text_domain' ),
'choose_from_most_used' => __( 'Alege dintre cei mai folosiți ani', '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 );
}
// Înregistrare Taxonomie Personalizată
function media_type() {
$labels = array(
'name' => _x( 'Tipuri', 'Nume General Taxonomie', 'text_domain' ),
'singular_name' => _x( 'Tip', 'Nume Singular Taxonomie', 'text_domain' ),
'menu_name' => __( 'Tip', 'text_domain' ),
'all_items' => __( 'Toate Tipurile', 'text_domain' ),
'parent_item' => __( 'Tip Părinte', 'text_domain' ),
'parent_item_colon' => __( 'Tip Părinte:', 'text_domain' ),
'new_item_name' => __( 'Nume Tip Nou', 'text_domain' ),
'add_new_item' => __( 'Adaugă Tip Nou', 'text_domain' ),
'edit_item' => __( 'Editează Tip', 'text_domain' ),
'update_item' => __( 'Actualizează Tip', 'text_domain' ),
'separate_items_with_commas' => __( 'Separă tipurile cu virgule', 'text_domain' ),
'search_items' => __( 'Caută tipuri', 'text_domain' ),
'add_or_remove_items' => __( 'Adaugă sau șterge tipuri', 'text_domain' ),
'choose_from_most_used' => __( 'Alege dintre cele mai folosite tipuri', '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 în acțiunea 'init'
add_action( 'init', 'special_media_post', 0 );
// Hook în acțiunea 'init'
add_action( 'init', 'media_year', 0 );
// Hook în acțiunea 'init'
add_action( 'init', 'media_type', 0 );
Dacă mai aveți nevoie să vedeți altceva, pot să adaug, dar nici măcar nu vede fișierul când pun un echo 'Hello World' în el. Deci pur și simplu nu vede nici single-special_media_post.php și nici archive-special_media_post.php
Modifică codul
De la:
'has_archive' => true,
La:
'has_archive' => false,
Apoi accesează pagina de permalinkuri, schimbă la setările implicite și revino la "pretty permalink"
%postname%/
Acum ar trebui să funcționeze.
Motivul pentru care nu se încarcă template-ul single-{custom_post_type}.php este datorită setării has_archive. Când has_archive este setat pe true, sistemul va căuta archive-{custom_post_type}.php în locul paginii single.
Sper că a funcționat.

Nu sunt sigur că asta e adevărat. Vizualizarea unui singur post rămâne vizualizarea unui singur post, indiferent dacă tipul de post suportă sau nu vizualizări de arhivă indexată.

Această soluție pe care am postat-o reprezintă modul în care mi-am rezolvat problema în tema pe care am dezvoltat-o eu. Pagina mea de tip post unic nu-mi arăta ceea ce doream să văd.

Este posibil ca soluția să provină din resetarea structurii de permalinkuri, ceea ce la rândul său a resetat regulile de rescriere.

setarea 'has_archive' nu are niciun efect asupra faptului dacă șablonul single-{post_type}.php va fi utilizat pentru o singură solicitare.

Am copiat codul tău, am resetat regulile de rescriere prin Admin și acum Tema folosește șabloanele corecte când vizitez o Postare Media.
Trebuie să resetezi regulile de rescriere o singură dată folosind hook-ul after_switch_theme. Acest lucru va asigura că regulile de rescriere sunt resetate automat după ce utilizatorul a activat Tema.
Poți folosi acest cod (direct din 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' );
Te rog să consulți WordPress Codex pentru mai multe informații: http://codex.wordpress.org/Function_Reference/register_post_type
EDIT: În astfel de cazuri, Plugin-ul Inspect Rewrite Rules este foarte util, deoarece îți permite să vezi regulile conectate la tipul tău de postare personalizată: http://wordpress.org/extend/plugins/rewrite-rules-inspector/
Ca o observație, te rog să notezi că locul recomandat pentru a pune Tipuri de Postare Personalizate este un Plugin, nu o Temă.

Este o bună practică să folosești register_activation_hook()
și register_deactivation_hook()
atunci când creezi noi tipuri de conținut.
Se pare că noile tipuri de conținut vor eșua mereu la rescriere. Pentru a evita acest lucru, pune în callback-ul register_activation_hook() funcția flush_rewrite_rules()
și funcția ta de înregistrare a noului tip de conținut. Nu știu de ce, dar făcând acest lucru se pare că eviți această problemă. Uite:
register_activation_hook( __FILE__, 'your_active_hook' );
function your_active_hook() {
special_media_post();
flush_rewrite_rules();
}
