WordPress.org

Make WordPress Core

Ticket #36411: custom-menu.php

File custom-menu.php, 7.7 KB (added by jadpm, 6 years ago)

Test case for broken menu generation

Line 
1<?php
2
3/**
4* Menu management issue
5*
6* When registering:
7*       a post type, that the current user has no rights to manage
8*       a custom taxonomy for that custom post type, that the current user has rights to manage
9* then the taxonomy that the current user can manage is not generating an admin menu entry.
10* If you add another taxonomy to that post type which the current user can manage, the admin menu is generated.
11*
12* See note at the end of ek_register_objects() for details on how to test.
13*/
14
15function ek_register_objects() {
16
17        $labels_cpt = array(
18                'name'                  => _x( 'Post Types', 'Post Type General Name', 'text_domain' ),
19                'singular_name'         => _x( 'Post Type', 'Post Type Singular Name', 'text_domain' ),
20                'menu_name'             => __( 'Post Types', 'text_domain' ),
21                'name_admin_bar'        => __( 'Post Type', 'text_domain' ),
22                'archives'              => __( 'Item Archives', 'text_domain' ),
23                'parent_item_colon'     => __( 'Parent Item:', 'text_domain' ),
24                'all_items'             => __( 'All Items', 'text_domain' ),
25                'add_new_item'          => __( 'Add New Item', 'text_domain' ),
26                'add_new'               => __( 'Add New', 'text_domain' ),
27                'new_item'              => __( 'New Item', 'text_domain' ),
28                'edit_item'             => __( 'Edit Item', 'text_domain' ),
29                'update_item'           => __( 'Update Item', 'text_domain' ),
30                'view_item'             => __( 'View Item', 'text_domain' ),
31                'search_items'          => __( 'Search Item', 'text_domain' ),
32                'not_found'             => __( 'Not found', 'text_domain' ),
33                'not_found_in_trash'    => __( 'Not found in Trash', 'text_domain' ),
34                'featured_image'        => __( 'Featured Image', 'text_domain' ),
35                'set_featured_image'    => __( 'Set featured image', 'text_domain' ),
36                'remove_featured_image' => __( 'Remove featured image', 'text_domain' ),
37                'use_featured_image'    => __( 'Use as featured image', 'text_domain' ),
38                'insert_into_item'      => __( 'Insert into item', 'text_domain' ),
39                'uploaded_to_this_item' => __( 'Uploaded to this item', 'text_domain' ),
40                'items_list'            => __( 'Items list', 'text_domain' ),
41                'items_list_navigation' => __( 'Items list navigation', 'text_domain' ),
42                'filter_items_list'     => __( 'Filter items list', 'text_domain' ),
43        );
44        $capabilities_cpt = array(
45                'edit_post'             => 'edit_ekpost',
46                'read_post'             => 'read_ekpost',
47                'delete_post'           => 'delete_ekpost',
48                'edit_posts'            => 'edit_ekposts',
49                'edit_others_posts'     => 'edit_others_ekposts',
50                'publish_posts'         => 'publish_ekposts',
51                'read_private_posts'    => 'read_private_ekposts',
52        );
53        $args_cpt = array(
54                'label'                 => __( 'Post Type', 'text_domain' ),
55                'description'           => __( 'Post Type Description', 'text_domain' ),
56                'labels'                => $labels_cpt,
57                'supports'              => array( ),
58                'hierarchical'          => false,
59                'public'                => true,
60                'show_ui'               => true,
61                'show_in_menu'          => true,
62                'menu_position'         => 5,
63                'show_in_admin_bar'     => true,
64                'show_in_nav_menus'     => true,
65                'can_export'            => true,
66                'has_archive'           => true,               
67                'exclude_from_search'   => false,
68                'publicly_queryable'    => true,
69                'capabilities'          => $capabilities_cpt,
70        );
71       
72        $labels_ct_one = array(
73                'name'                       => _x( 'Taxonomies One', 'Taxonomy General Name', 'text_domain' ),
74                'singular_name'              => _x( 'Taxonomy One', 'Taxonomy Singular Name', 'text_domain' ),
75                'menu_name'                  => __( 'Taxonomy One', 'text_domain' ),
76                'all_items'                  => __( 'All Items', 'text_domain' ),
77                'parent_item'                => __( 'Parent Item', 'text_domain' ),
78                'parent_item_colon'          => __( 'Parent Item:', 'text_domain' ),
79                'new_item_name'              => __( 'New Item Name', 'text_domain' ),
80                'add_new_item'               => __( 'Add New Item', 'text_domain' ),
81                'edit_item'                  => __( 'Edit Item', 'text_domain' ),
82                'update_item'                => __( 'Update Item', 'text_domain' ),
83                'view_item'                  => __( 'View Item', 'text_domain' ),
84                'separate_items_with_commas' => __( 'Separate items with commas', 'text_domain' ),
85                'add_or_remove_items'        => __( 'Add or remove items', 'text_domain' ),
86                'choose_from_most_used'      => __( 'Choose from the most used', 'text_domain' ),
87                'popular_items'              => __( 'Popular Items', 'text_domain' ),
88                'search_items'               => __( 'Search Items', 'text_domain' ),
89                'not_found'                  => __( 'Not Found', 'text_domain' ),
90                'no_terms'                   => __( 'No items', 'text_domain' ),
91                'items_list'                 => __( 'Items list', 'text_domain' ),
92                'items_list_navigation'      => __( 'Items list navigation', 'text_domain' ),
93        );
94        $args_ct_one = array(
95                'labels'                     => $labels_ct_one,
96                'hierarchical'               => false,
97                'public'                     => true,
98                'show_ui'                    => true,
99                'show_admin_column'          => true,
100                'show_in_nav_menus'          => true,
101                'show_tagcloud'              => true,
102        );
103       
104        $labels_ct_two = array(
105                'name'                       => _x( 'Taxonomies Two', 'Taxonomy General Name', 'text_domain' ),
106                'singular_name'              => _x( 'Taxonomy Two', 'Taxonomy Singular Name', 'text_domain' ),
107                'menu_name'                  => __( 'Taxonomy Two', 'text_domain' ),
108                'all_items'                  => __( 'All Items', 'text_domain' ),
109                'parent_item'                => __( 'Parent Item', 'text_domain' ),
110                'parent_item_colon'          => __( 'Parent Item:', 'text_domain' ),
111                'new_item_name'              => __( 'New Item Name', 'text_domain' ),
112                'add_new_item'               => __( 'Add New Item', 'text_domain' ),
113                'edit_item'                  => __( 'Edit Item', 'text_domain' ),
114                'update_item'                => __( 'Update Item', 'text_domain' ),
115                'view_item'                  => __( 'View Item', 'text_domain' ),
116                'separate_items_with_commas' => __( 'Separate items with commas', 'text_domain' ),
117                'add_or_remove_items'        => __( 'Add or remove items', 'text_domain' ),
118                'choose_from_most_used'      => __( 'Choose from the most used', 'text_domain' ),
119                'popular_items'              => __( 'Popular Items', 'text_domain' ),
120                'search_items'               => __( 'Search Items', 'text_domain' ),
121                'not_found'                  => __( 'Not Found', 'text_domain' ),
122                'no_terms'                   => __( 'No items', 'text_domain' ),
123                'items_list'                 => __( 'Items list', 'text_domain' ),
124                'items_list_navigation'      => __( 'Items list navigation', 'text_domain' ),
125        );
126        $args_ct_two = array(
127                'labels'                     => $labels_ct_two,
128                'hierarchical'               => false,
129                'public'                     => true,
130                'show_ui'                    => true,
131                'show_admin_column'          => true,
132                'show_in_nav_menus'          => true,
133                'show_tagcloud'              => true,
134        );
135       
136        /**
137        * Try the following combinations with a user with editor role visiting the backend:
138        *       Registering the post type and taxonomy ek_tax_one displays no admin menu for any registered item.
139        *               It should register an admin menu for ek_tax_one
140        *               You can always access the admin page for managing terms directly on /wp-admin/edit-tags.php?taxonomy=ek_tax_one&post_type=ek_post_type
141        *       Registering the post type and taxonomies ek_tax_one and ek_tax_two displays an admin menu for any registered item
142        */
143       
144        register_post_type( 'ek_post_type', $args_cpt );
145        register_taxonomy( 'ek_tax_one', array( 'ek_post_type' ), $args_ct_one );
146        //register_taxonomy( 'ek_tax_two', array( 'ek_post_type' ), $args_ct_two );
147
148}
149add_action( 'init', 'ek_register_objects', 0 );