Özel gönderi türü single- {custom} .php çalışmıyor


19

Ben makine adı special_media_post ile özel bir yazı tipi yaptım ve wordpress sadece single-special_media_post.php görmüyor. Ben tamamen kayboldum. İndex.php varsayılan olarak kalır

İşte benim özel yazı türü ve onun sınıflandırma için benim kod:

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

Görmeniz gereken başka bir şey varsa, koyabilirim, ama oraya bir yankı 'Merhaba Dünya' koyarsam bile görmez. Yani, single-special_media_post.php ya da arşiv-special_media_post.php dosyasını görmüyor.

Yanıtlar:


57

Kalıcı bağlantılar sayfasını ziyaret edin (temizleyecek) ve tekrar kontrol edin. WordPress'in hiyerarşiye eklediğinizi tanıması için muhtemelen sürüklenmesi gerekir.


2
Vaov! çekicilik gibi çalışır, 1 saat boşa :(
Muhammed Sufyan

5

Kodu değiştirin

Gönderen:

 'has_archive'         => true,

Alıcı:

 'has_archive'         => false,

Ardından kalıcı bağlantı sayfasına gidin, varsayılana geçin ve "güzel kalıcı bağlantı" ya geri dönün

%posta adı%/

Şimdi çalışmalı.

Tek- {custom_post_type} .php sayfasına gitmemesinin nedeni has_archive nedeniyledir. Has_archive true olarak ayarlandığında, tek sayfa yerine archive- {custom_post_type} .php dosyasını arar.

Umarım bu işe yaradı.


1
Bunun doğru olduğundan emin değilim. Tek bir gönderi görünümü, gönderi türü arşiv dizini görünümlerini destekleyip desteklemediğinden bağımsız olarak tek bir gönderi görünümüdür.
Chip Bennett

Gönderdiğim bu çözüm, kendi geliştirdiğim temamdaki sorunumu nasıl çözdüğüm. Tek yazı türü sayfam şimdi ne görmek istediğimi gösterdiğinde
Wesley Cheung

3
Düzeltmenin, yeniden yazma kurallarını temizleyen kalıcı bağlantı yapısını sıfırlaması olabilir.
Chip Bennett

2
'has_archive' ayarının, tek bir istek için single- {post_type} .php şablonunun kullanılacağı veya kullanılmayacağı bir etkisi yoktur.
Jules

Tıkır tıkır çalışıyor. Teşekkürler ahbap!
user1202416

1

Yeni içerik türleri oluştururken register_activation_hook()ve register_deactivation_hook()oluştururken de iyi bir uygulamadır .

Yeni içerik türlerinin her zaman yeniden yazılmayacağı anlaşılıyor. Bundan kaçınmak için register_activation_hook () geri aramasını flush_rewrite_rules()ve yeni içerik kaydetme işlevinizi girin. Nedenini bilmiyorum, ama bunu yapmak bu sorunu önlüyor gibi görünüyor. Bak:

register_activation_hook( __FILE__, 'your_active_hook' );

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

0

Kodunuzu kopyaladım, Yönetici üzerinden yeniden yazma kurallarını temizledim ve şimdi bir Medya Postasını ziyaret ettiğimde Tema doğru şablonları kullanıyor.

Yeniden yazma kurallarını temizlemeniz gerekir After_switch_theme kancasını kullanarak kez . Bu, kullanıcı Temayı etkinleştirdikten sonra yeniden yazma kurallarının otomatik olarak temizlenmesini sağlar.

Bu kodu (doğrudan Codex'tan) kullanabilirsiniz:

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

Daha fazla bilgi için lütfen WordPress Kodeksine bakın: http://codex.wordpress.org/Function_Reference/register_post_type

DÜZENLEME: Böyle bir durumda, Yeniden Yazma Kurallarını Denetle Eklentisi çok kullanışlıdır, çünkü özel yazı türünüze bağlı kuralları görmenizi sağlar: http://wordpress.org/extend/plugins/rewrite-rules-inspector/

Ayrıca, Özel Yazı Türlerini koymak için önerilen yerin bir Tema değil, bir Eklenti olduğunu lütfen unutmayın.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.