Loại bài đăng tùy chỉnh đơn- {custom} .php không hoạt động


18

Tôi đã tạo một loại bài đăng tùy chỉnh với tên máy Special_media_post và wordpress chỉ đơn giản là không nhìn thấy đơn-Special_media_post.php. Tôi hoàn toàn thua cuộc. Nó tiếp tục mặc định cho index.php

Đây là mã của tôi cho loại bài đăng tùy chỉnh của tôi và các nguyên tắc phân loại của nó:

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

Nếu có thứ gì khác bạn cần xem, tôi có thể đặt nó lên, nhưng nó thậm chí không nhìn thấy nếu tôi đặt một tiếng vang 'Xin chào thế giới' trong đó. Vì vậy, nó chỉ đơn giản là không nhìn thấy một-Special_media_post.php hoặc archive-Special_media_post.php

Câu trả lời:


57

Truy cập trang permalinks (sẽ xóa nó) và kiểm tra lại. WordPress có lẽ chỉ cần được khoả thân để nhận ra sự bổ sung của bạn vào hệ thống phân cấp.


2
ồ hoạt động như bùa mê, lãng phí 1 giờ :(
Mohammed Sufian

5

Thay đổi mã

Từ :

 'has_archive'         => true,

Đến :

 'has_archive'         => false,

Và sau đó chuyển đến trang permalink, thay đổi thành mặc định và quay lại "permalink đẹp" của bạn

%đăng tên%/

Bây giờ nó sẽ làm việc.

Lý do tại sao nó không đi đến trang đơn {{custom_post_type} .php là vì has_archive. Khi has_archive được đặt thành true, nó sẽ tìm tệp lưu trữ- {custom_post_type} .php thay vì trang đơn.

Hy vọng điều này làm việc.


1
Tôi không chắc đó là sự thật. Một chế độ xem bài đăng là một chế độ xem bài đăng duy nhất, cho dù loại bài đăng có hỗ trợ chế độ xem chỉ mục lưu trữ hay không.
Chip Bennett

Giải pháp này tôi đã đăng là cách tôi giải quyết vấn đề của mình về chủ đề tự phát triển. Khi trang loại bài đăng duy nhất của tôi bây giờ sẽ cho tôi thấy những gì tôi muốn xem.
Wesley Cheung

3
Có thể sửa lỗi là từ việc đặt lại cấu trúc permalink, từ đó làm đảo lộn các quy tắc viết lại.
Chip Bennett

2
thiết lập 'has_archive' không có tác dụng đối với wheter hoặc không phải mẫu đơn {{post_type} .php sẽ được sử dụng cho một yêu cầu.
Jules

Hoạt động như một lá bùa. Cảm ơn anh bạn!
dùng1202416

1

Đó là một thực tiễn tốt cũng sử dụng register_activation_hook()register_deactivation_hook()khi tạo các loại nội dung mới.

Có vẻ như các loại nội dung mới luôn luôn sẽ không được viết lại. Để tránh điều này, hãy đặt lại hàm call_activation_hook () flush_rewrite_rules()và chức năng nội dung mới đăng ký của bạn. Tôi không biết tại sao, nhưng làm điều này dường như để tránh vấn đề này. Nhìn:

register_activation_hook( __FILE__, 'your_active_hook' );

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

0

Tôi đã sao chép mã của bạn, xóa các quy tắc viết lại thông qua Quản trị viên và bây giờ Chủ đề sử dụng các mẫu phù hợp khi tôi truy cập Bài đăng phương tiện.

Bạn cần xóa các quy tắc viết lại một lần bằng cách sử dụng hook after_switch_theme. Điều này sẽ đảm bảo rằng các quy tắc viết lại sẽ tự động được xóa sau khi người dùng đã kích hoạt Chủ đề.

Bạn có thể sử dụng mã này (trực tiếp từ 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' );

Vui lòng tham khảo Codex WordPress để biết thêm thông tin: http://codex.wordpress.org/Function_Reference/register_post_type

EDIT: Trong trường hợp như vậy, Plugin Inspect Rewrite Rules rất tiện dụng, bởi vì nó cho phép bạn xem các quy tắc được kết nối với loại bài đăng tùy chỉnh của bạn: http://wordpress.org/extend/plugins/rewrite-rules-inspector/

Trên một sidenote cũng xin lưu ý rằng vị trí được đề xuất để đặt Loại bài đăng tùy chỉnh là một Plugin, không phải là một Chủ đề.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.