我在wordpress主题的插件中创建了自定义分类法分类。插件激活后,我导航到自定义帖子类型的管理部分,显示网站上显示的所有帖子和页面。此外,当我尝试从自定义帖子类型管理区域删除这些帖子和页面时,我收到“无效的帖子类型”错误。 有没有人有这方面的经验,有没有解决方案?
'code'add_action ('init', 'create_post_type' );
function create_post_type() {
register_post_type( 'my_slide',
array(
'labels' => array(
'name' => __( 'Slides' ),
'singular_name' => __( 'Slide' ),
'add_new' => 'Add New',
'add_new_item' => 'Add New Slide',
'edit' => 'Edit',
'edit_item' => 'Edit Slide',
'new_item' => 'New Slide',
'view' => 'View',
'view_item' => 'View Slide',
'search_items' => 'Search Slides',
'not_found' => 'No Slides found',
'not_found_in_trash' => 'No Slides found in Trash',
'parent' => 'Parent Slide'
),
'public' => true,
'has_archive' => true,
'show_ui' => true,
'capability_type' => 'post',
'hierarchical' => false,
'rewrite' => true,
'map_meta_cap' => true,
'query_var' => false,
'register_meta_box_cb' => 'slide_meta_box_add',
'supports' => array('title', 'editor', 'thumbnail', 'post-formats', 'Custom Featured Image links')
)
);
}
add_action( 'init', 'create_slider_taxonomies', 0 );
function create_slider_taxonomies() {
register_taxonomy(
'slider_category',
array( 'my_slide' ),
array(
'labels' => array(
'name' => 'Slide Category',
'add_new_item' => 'Add New Slide Category',
'new_item_name' => 'New Slide Category Name'
),
'show_ui' => true,
'show_tagcloud' => false,
'show_admin_column' => true,
'hierarchical' => true
)
);
}'code'
答案 0 :(得分:0)
如您所述,问题在于pre_get_posts()
未检查是否显示管理区域。可以使用is_admin()
条件对此进行测试。
function add_post_types_to_query( $query ) {
if ( (!is_admin()) && $query->is_main_query() )
$query->set( 'post_type', array( 'post', 'video' ) ); //video is a custom post type
return $query;
}
add_action( 'pre_get_posts', 'add_post_types_to_query' );
上述内容将阻止所有管理区域中显示的帖子。
您可能希望检查另外几个条件。有了上述内容,我遇到了关于页面stoping working的链接的问题。通过检查帖子页面is_archive()
是否可以解决这个问题。有了这个,自定义帖子类型可能不会显示在主页上。这可以通过向函数添加is_home()
条件来解决。
最终的pre_get_posts函数可能看起来像。
function add_post_types_to_query( $query ) {
if ( (!is_admin()) && $query->is_main_query() )
if ( $query->is_archive() || $query-> is_home() ) {
$query->set( 'post_type', array( 'post', 'video' ) ); //video is a custom post type
}
return $query;
}
add_action( 'pre_get_posts', 'add_post_types_to_query' );
我希望这有助于将来看这篇文章的任何人。