这是我的自定义帖子类型及其分类法的代码:
//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 );
如果有的话否则您需要查看,我可以提出来,但是如果我在其中添加回声“ Hello World”,它甚至都看不到。因此,根本看不到single-special_media_post.php或archive-special_media_post.php
#1 楼
访问永久链接页面(将刷新页面),然后再次检查。 WordPress可能只需要轻推一下即可识别您对层次结构的添加。#2 楼
更改代码从:
'has_archive' => true,
到:
'has_archive' => false,
然后转到永久链接页面,更改为默认值,然后返回到您的“永久链接”。
%postname%/
现在它应该可以使用了。
之所以无法进入单一{custom_post_type} .php页面的原因是has_archive。
将has_archive设置为true时,它将查找archive- {custom_post_type} .php而不是单个页面。
希望此方法有效。
评论
我不确定那是真的。无论帖子类型是否支持存档索引视图,单个帖子视图都是一个帖子视图。
–芯片Bennett
13年4月23日在13:07
我发布的此解决方案是我如何解决自己开发的主题的问题。当我的单个帖子类型页面现在将向我显示我想看到的内容时。
–张卫
13-4-23在13:12
修复的可能是重置了永久链接结构,从而刷新了重写规则。
–芯片Bennett
13年4月23日在13:18
设置“ has_archive”对其他设置没有任何影响,否则单个{post_type} .php模板将不会用于单个请求。
–法律
18年1月18日在14:07
奇迹般有效。谢谢老兄!
–user1202416
19年8月30日在20:18
#3 楼
在创建新的内容类型时,最好也使用register_activation_hook()
和register_deactivation_hook()
。 似乎新的新内容类型总是无法重写。为避免这种情况,请在
flush_rewrite_rules()
和您的注册新内容函数中加入register_activation_hook()回调。我不知道为什么,但是这样做似乎可以避免这个问题。外观:register_activation_hook( __FILE__, 'your_active_hook' );
function your_active_hook() {
special_media_post();
flush_rewrite_rules();
}
#4 楼
我复制了您的代码,通过Admin刷新了重写规则,现在,当我访问Media Post时,Theme使用正确的模板。您需要使用after_switch_theme挂钩刷新一次重写规则。这样可以确保在用户激活主题之后,重写规则会自动刷新。
您可以使用以下代码(直接来自食典):
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' );
,有关更多信息,请查阅WordPress Codex:http://codex.wordpress.org/Function_Reference/register_post_type
编辑:在这种情况下,将提供检查重写规则插件非常方便,因为它可以让您查看与自定义帖子类型相关的规则:http://wordpress.org/extend/plugins/rewrite-rules-inspector/
在旁注中也请注意建议放置“自定义帖子类型”的地方是插件,而不是主题。
评论
哇!像魅力一样工作,浪费了1个小时:(
–穆罕默德·苏菲安
16-09-22在10:05
还浪费了一个小时,谢谢!
– Ted Whitehead
20年4月8日在15:38
是的,浪费了一个小时。威尔接下来的事情。
–bwoogie
20年4月28日在17:33