Jenis pos khusus tunggal- {custom} .php tidak berfungsi

18

Saya membuat jenis posting kustom dengan nama mesin special_media_post dan wordpress sama sekali tidak melihat single-special_media_post.php. Saya benar-benar kehilangan. Itu tetap default ke index.php

Ini kode saya untuk jenis posting kustom saya dan taksonomi-nya:

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

Jika ada hal lain yang perlu Anda lihat, saya dapat memasangnya, tetapi bahkan tidak melihatnya jika saya memasang gema 'Hello World' di sana. Jadi tidak melihat single-special_media_post.php atau arsip-special_media_post.php

BobbyDank
sumber

Jawaban:

57

Kunjungi halaman permalinks (yang akan menyiramnya) dan periksa lagi. WordPress mungkin hanya perlu didorong untuk mengenali penambahan Anda pada hierarki.

vancoder
sumber
2
Wow! bekerja seperti pesona, terbuang 1 jam :(
Mohammed Sufian
5

Ubah kodenya

Dari:

 'has_archive'         => true,

Kepada:

 'has_archive'         => false,

Dan kemudian pergi ke halaman permalink, ubah ke default dan kembali ke "permalink cantik" Anda

% postname% /

Sekarang ini seharusnya bekerja.

Alasan mengapa itu tidak pergi ke halaman single- {custom_post_type} .php adalah karena has_archive. Ketika has_archive disetel pada true, has_archive akan mencari arsip- {custom_post_type} .php alih-alih satu halaman.

Semoga ini berhasil.

Wesley Cheung
sumber
1
Saya tidak yakin itu benar. Tampilan posting tunggal adalah tampilan posting tunggal, apakah tipe posting mendukung tampilan indeks arsip atau tidak.
Chip Bennett
Solusi ini saya posting adalah bagaimana saya memecahkan masalah saya pada tema yang saya kembangkan sendiri. Ketika halaman jenis posting tunggal saya sekarang akan menunjukkan kepada saya apa yang ingin saya lihat.
Wesley Cheung
3
Ada kemungkinan bahwa perbaikannya adalah dari pengaturan ulang struktur permalink, yang pada gilirannya memunculkan aturan penulisan ulang.
Chip Bennett
2
pengaturan 'has_archive' tidak berpengaruh pada apakah atau tidak template single- {post_type} .php akan digunakan untuk satu permintaan.
Jules
Bekerja seperti pesona. Bung terima kasih!
user1202416
1

Ini praktik yang baik juga menggunakan register_activation_hook()dan register_deactivation_hook()ketika membuat jenis konten baru.

Tampaknya tipe konten baru yang segar akan selalu gagal ditulis ulang. Untuk menghindari hal ini, masukkan call_ register_activation_hook () flush_rewrite_rules()dan fungsi konten baru pendaftaran Anda. Saya tidak tahu mengapa, tetapi melakukan ini tampaknya menghindari masalah ini. Lihat:

register_activation_hook( __FILE__, 'your_active_hook' );

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

Saya menyalin kode Anda, menghapus aturan penulisan ulang melalui Admin dan sekarang Tema menggunakan templat yang tepat ketika saya mengunjungi Media Post.

Anda harus menyiram aturan penulisan ulang sekali menggunakan kait after_switch_theme. Ini akan memastikan bahwa aturan penulisan ulang dihapus secara otomatis setelah pengguna mengaktifkan Tema.

Anda dapat menggunakan kode ini (langsung dari 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' );

Silakan berkonsultasi dengan WordPress Codex untuk informasi lebih lanjut: http://codex.wordpress.org/Function_Reference/register_post_type

EDIT: Dalam kasus seperti itu, Plugin Inspect Rewrite Rules sangat berguna, karena memungkinkan Anda untuk melihat aturan yang terhubung ke jenis posting kustom Anda: http://wordpress.org/extend/plugins/rewrite-rules-inspector/

Pada sidenote, harap perhatikan juga bahwa tempat yang disarankan untuk meletakkan Jenis Posting Khusus adalah Plugin, bukan Tema.

Jujur
sumber