Șablonul single-{custom}.php pentru tipul de postare personalizat nu funcționează

22 apr. 2013, 22:30:41
Vizualizări: 61.6K
Voturi: 23

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

0
Toate răspunsurile la întrebare 4
3
75

Accesează pagina de legături permanente (care va forța reînnoirea acestora) și verifică din nou. Probabil că WordPress are nevoie doar de un mic impuls pentru a recunoaște adăugarea ta în ierarhie.

22 apr. 2013 23:53:29
Comentarii

wow! funcționează perfect, am pierdut 1 oră :(

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

și eu am pierdut o oră, mulțumesc!

Ted Whitehead Ted Whitehead
8 apr. 2020 18:38:21

da, o oră pierdută. Ei bine. Mergem mai departe.

bwoogie bwoogie
28 apr. 2020 20:33:59
6

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.

23 apr. 2013 16:06:31
Comentarii

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

Chip Bennett Chip Bennett
23 apr. 2013 16:07:56

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.

Wesley Cheung Wesley Cheung
23 apr. 2013 16:12:11

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

Chip Bennett Chip Bennett
23 apr. 2013 16:18:05

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

Jules Jules
18 ian. 2018 16:07:42

Funcționează perfect. Mulțumesc, omule!

user1202416 user1202416
30 aug. 2019 23:18:35

@Jules - Poate că nu ar trebui, dar CU SIGURANȚĂ o face.

dgo dgo
29 iun. 2022 00:43:34
Arată celelalte 1 comentarii
0

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

23 apr. 2013 17:58:53
0

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();
}
22 aug. 2017 14:36:27