1

I have a class for registering post types based on the Wordpress Plugin Boiler Plate, in the below can anyone tell me why the taxonomy isn't showing in the admin menus at all?

/**
 * Register custom post type
 *
 */
class Hi_Food_Menu_Post_Types {
    /**
     * Register custom post type
     *
     * @link https://codex.wordpress.org/Function_Reference/register_post_type
     */
    private function register_single_post_type( $fields ) {
        /**
         * Labels used when displaying the posts in the admin and sometimes on the front end.  These
         * labels do not cover post updated, error, and related messages.  You'll need to filter the
         * 'post_updated_messages' hook to customize those.
         */
        $labels = array(
            'name'                  => $fields['plural'],
            'singular_name'         => $fields['singular'],
            'menu_name'             => $fields['menu_name'],
            'new_item'              => sprintf( __( 'New %s', 'plugin-name' ), $fields['singular'] ),
            'add_new_item'          => sprintf( __( 'Add new %s', 'plugin-name' ), $fields['singular'] ),
            'edit_item'             => sprintf( __( 'Edit %s', 'plugin-name' ), $fields['singular'] ),
            'view_item'             => sprintf( __( 'View %s', 'plugin-name' ), $fields['singular'] ),
            'view_items'            => sprintf( __( 'View %s', 'plugin-name' ), $fields['plural'] ),
            'search_items'          => sprintf( __( 'Search %s', 'plugin-name' ), $fields['plural'] ),
            'not_found'             => sprintf( __( 'No %s found', 'plugin-name' ), strtolower( $fields['plural'] ) ),
            'not_found_in_trash'    => sprintf( __( 'No %s found in trash', 'plugin-name' ), strtolower( $fields['plural'] ) ),
            'all_items'             => sprintf( __( 'All %s', 'plugin-name' ), $fields['plural'] ),
            'archives'              => sprintf( __( '%s Archives', 'plugin-name' ), $fields['singular'] ),
            'attributes'            => sprintf( __( '%s Attributes', 'plugin-name' ), $fields['singular'] ),
            'insert_into_item'      => sprintf( __( 'Insert into %s', 'plugin-name' ), strtolower( $fields['singular'] ) ),
            'uploaded_to_this_item' => sprintf( __( 'Uploaded to this %s', 'plugin-name' ), strtolower( $fields['singular'] ) ),
            /* Labels for hierarchical post types only. */
            'parent_item'           => sprintf( __( 'Parent %s', 'plugin-name' ), $fields['singular'] ),
            'parent_item_colon'     => sprintf( __( 'Parent %s:', 'plugin-name' ), $fields['singular'] ),
            /* Custom archive label.  Must filter 'post_type_archive_title' to use. */
            'archive_title'        => $fields['plural'],
        );
        $args = array(
            'labels'             => $labels,
            'description'        => ( isset( $fields['description'] ) ) ? $fields['description'] : '',
            'public'             => ( isset( $fields['public'] ) ) ? $fields['public'] : true,
            'publicly_queryable' => ( isset( $fields['publicly_queryable'] ) ) ? $fields['publicly_queryable'] : true,
            'exclude_from_search'=> ( isset( $fields['exclude_from_search'] ) ) ? $fields['exclude_from_search'] : false,
            'show_ui'            => ( isset( $fields['show_ui'] ) ) ? $fields['show_ui'] : true,
            'show_in_menu'       => ( isset( $fields['show_in_menu'] ) ) ? $fields['show_in_menu'] : true,
            'query_var'          => ( isset( $fields['query_var'] ) ) ? $fields['query_var'] : true,
            'show_in_admin_bar'  => ( isset( $fields['show_in_admin_bar'] ) ) ? $fields['show_in_admin_bar'] : true,
            'capability_type'    => ( isset( $fields['capability_type'] ) ) ? $fields['capability_type'] : 'post',
            'has_archive'        => ( isset( $fields['has_archive'] ) ) ? $fields['has_archive'] : true,
            'hierarchical'       => ( isset( $fields['hierarchical'] ) ) ? $fields['hierarchical'] : true,
            'supports'           => ( isset( $fields['supports'] ) ) ? $fields['supports'] : array(
                    'title',
                    'editor',
                    'excerpt',
                    'author',
                    'thumbnail',
                    'comments',
                    'trackbacks',
                    'custom-fields',
                    'revisions',
                    'page-attributes',
                    'post-formats',
            ),
            'menu_position'      => ( isset( $fields['menu_position'] ) ) ? $fields['menu_position'] : 21,
            'menu_icon'          => ( isset( $fields['menu_icon'] ) ) ? $fields['menu_icon']: 'dashicons-admin-generic',
            'show_in_nav_menus'  => ( isset( $fields['show_in_nav_menus'] ) ) ? $fields['show_in_nav_menus'] : true,
        );
        if ( isset( $fields['rewrite'] ) ) {
            /**
             *  Add $this->plugin_name as translatable in the permalink structure,
             *  to avoid conflicts with other plugins which may use customers as well.
             */
            $args['rewrite'] = $fields['rewrite'];
        }
        if ( $fields['custom_caps'] ) {
            /**
             * Provides more precise control over the capabilities than the defaults.  By default, WordPress
             * will use the 'capability_type' argument to build these capabilities.  More often than not,
             * this results in many extra capabilities that you probably don't need.  The following is how
             * I set up capabilities for many post types, which only uses three basic capabilities you need
             * to assign to roles: 'manage_examples', 'edit_examples', 'create_examples'.  Each post type
             * is unique though, so you'll want to adjust it to fit your needs.
             *
             * @link https://gist.github.com/creativembers/6577149
             * @link http://justintadlock.com/archives/2010/07/10/meta-capabilities-for-custom-post-types
             */
            $args['capabilities'] = array(
                // Meta capabilities
                'edit_post'                 => 'edit_' . strtolower( $fields['singular'] ),
                'read_post'                 => 'read_' . strtolower( $fields['singular'] ),
                'delete_post'               => 'delete_' . strtolower( $fields['singular'] ),
                // Primitive capabilities used outside of map_meta_cap():
                'edit_posts'                => 'edit_' . strtolower( $fields['plural'] ),
                'edit_others_posts'         => 'edit_others_' . strtolower( $fields['plural'] ),
                'publish_posts'             => 'publish_' . strtolower( $fields['plural'] ),
                'read_private_posts'        => 'read_private_' . strtolower( $fields['plural'] ),
                // Primitive capabilities used within map_meta_cap():
                'delete_posts'              => 'delete_' . strtolower( $fields['plural'] ),
                'delete_private_posts'      => 'delete_private_' . strtolower( $fields['plural'] ),
                'delete_published_posts'    => 'delete_published_' . strtolower( $fields['plural'] ),
                'delete_others_posts'       => 'delete_others_' . strtolower( $fields['plural'] ),
                'edit_private_posts'        => 'edit_private_' . strtolower( $fields['plural'] ),
                'edit_published_posts'      => 'edit_published_' . strtolower( $fields['plural'] ),
                'create_posts'              => 'edit_' . strtolower( $fields['plural'] )
            );
            /**
             * Adding map_meta_cap will map the meta correctly.
             * @link https://wordpress.stackexchange.com/questions/108338/capabilities-and-custom-post-types/108375#108375
             */
            $args['map_meta_cap'] = true;
            /**
             * Assign capabilities to users
             * Without this, users - also admins - can not see post type.
             */
            $this->assign_capabilities( $args['capabilities'], $fields['custom_caps_users'] );
        }


        register_post_type( $fields['slug'], $args );
        /**
         * Register Taxnonmies if any
         * @link https://codex.wordpress.org/Function_Reference/register_taxonomy
         */
        if ( isset( $fields['taxonomies'] ) && is_array( $fields['taxonomies'] ) ) {
            foreach ( $fields['taxonomies'] as $taxonomy ) {
                $this->register_single_post_type_taxnonomy( $taxonomy );
            }
        }
    }
    private function register_single_post_type_taxnonomy( $tax_fields ) {
        $labels = array(
            'name'                       => $tax_fields['plural'],
            'singular_name'              => $tax_fields['single'],
            'menu_name'                  => $tax_fields['plural'],
            'all_items'                  => sprintf( __( 'All %s' , 'plugin-name' ), $tax_fields['plural'] ),
            'edit_item'                  => sprintf( __( 'Edit %s' , 'plugin-name' ), $tax_fields['single'] ),
            'view_item'                  => sprintf( __( 'View %s' , 'plugin-name' ), $tax_fields['single'] ),
            'update_item'                => sprintf( __( 'Update %s' , 'plugin-name' ), $tax_fields['single'] ),
            'add_new_item'               => sprintf( __( 'Add New %s' , 'plugin-name' ), $tax_fields['single'] ),
            'new_item_name'              => sprintf( __( 'New %s Name' , 'plugin-name' ), $tax_fields['single'] ),
            'parent_item'                => sprintf( __( 'Parent %s' , 'plugin-name' ), $tax_fields['single'] ),
            'parent_item_colon'          => sprintf( __( 'Parent %s:' , 'plugin-name' ), $tax_fields['single'] ),
            'search_items'               => sprintf( __( 'Search %s' , 'plugin-name' ), $tax_fields['plural'] ),
            'popular_items'              => sprintf( __( 'Popular %s' , 'plugin-name' ), $tax_fields['plural'] ),
            'separate_items_with_commas' => sprintf( __( 'Separate %s with commas' , 'plugin-name' ), $tax_fields['plural'] ),
            'add_or_remove_items'        => sprintf( __( 'Add or remove %s' , 'plugin-name' ), $tax_fields['plural'] ),
            'choose_from_most_used'      => sprintf( __( 'Choose from the most used %s' , 'plugin-name' ), $tax_fields['plural'] ),
            'not_found'                  => sprintf( __( 'No %s found' , 'plugin-name' ), $tax_fields['plural'] ),
        );
        $args = array(
            'label'                 => $tax_fields['plural'],
            'labels'                => $labels,
            'hierarchical'          => ( isset( $tax_fields['hierarchical'] ) )          ? $tax_fields['hierarchical']          : true,
            'public'                => ( isset( $tax_fields['public'] ) )                ? $tax_fields['public']                : true,
            'show_ui'               => ( isset( $tax_fields['show_ui'] ) )               ? $tax_fields['show_ui']               : true,
            'show_in_nav_menus'     => ( isset( $tax_fields['show_in_nav_menus'] ) )     ? $tax_fields['show_in_nav_menus']     : true,
            'show_tagcloud'         => ( isset( $tax_fields['show_tagcloud'] ) )         ? $tax_fields['show_tagcloud']         : true,
            'meta_box_cb'           => ( isset( $tax_fields['meta_box_cb'] ) )           ? $tax_fields['meta_box_cb']           : null,
            'show_admin_column'     => ( isset( $tax_fields['show_admin_column'] ) )     ? $tax_fields['show_admin_column']     : true,
            'show_in_quick_edit'    => ( isset( $tax_fields['show_in_quick_edit'] ) )    ? $tax_fields['show_in_quick_edit']    : true,
            'update_count_callback' => ( isset( $tax_fields['update_count_callback'] ) ) ? $tax_fields['update_count_callback'] : '',
            'show_in_rest'          => ( isset( $tax_fields['show_in_rest'] ) )          ? $tax_fields['show_in_rest']          : true,
            'rest_base'             => $tax_fields['taxonomy'],
            'rest_controller_class' => ( isset( $tax_fields['rest_controller_class'] ) ) ? $tax_fields['rest_controller_class'] : 'WP_REST_Terms_Controller',
            'query_var'             => $tax_fields['taxonomy'],
            'rewrite'               => ( isset( $tax_fields['rewrite'] ) )               ? $tax_fields['rewrite']               : true,
            'sort'                  => ( isset( $tax_fields['sort'] ) )                  ? $tax_fields['sort']                  : '',
        );
        $args = apply_filters( $tax_fields['taxonomy'] . '_args', $args );
        register_taxonomy( $tax_fields['taxonomy'], $tax_fields['post_types'], $args );
    }
    /**
     * Assign capabilities to users
     *
     * @link https://codex.wordpress.org/Function_Reference/register_post_type
     * @link https://typerocket.com/ultimate-guide-to-custom-post-types-in-wordpress/
     */
    public function assign_capabilities( $caps_map, $users  ) {
        foreach ( $users as $user ) {
            $user_role = get_role( $user );
            foreach ( $caps_map as $cap_map_key => $capability ) {
                $user_role->add_cap( $capability );
            }
        }
    }
    /**
     * CUSTOMIZE CUSTOM POST TYPE AS YOU WISH.
     */
    /**
     * Create post types
     */
    public function create_custom_post_type() {

        $food_menu_item_fields = array(
            array(
                'slug'                  => 'food-menu-item',
                'singular'              => 'Food Menu Item',
                'plural'                => 'Food Menu Items',
                'menu_name'             => 'Food Menu Items',
                'description'           => 'Food Menu Items',
                'has_archive'           => true,
                'hierarchical'          => false,
                'menu_icon'             => 'dashicons-carrot',
                'rewrite' => array(
                    'slug'                  => 'food-menu-items',
                    'with_front'            => true,
                    'pages'                 => true,
                    'feeds'                 => true,
                    'ep_mask'               => EP_PERMALINK,
                ),
                'menu_position'         => 21,
                'public'                => true,
                'publicly_queryable'    => true,
                'exclude_from_search'   => true,
                'show_ui'               => true,
                'show_in_menu'          => true,
                'query_var'             => true,
                'show_in_admin_bar'     => true,
                'show_in_nav_menus'     => true,
                'supports'              => array(
                    'title',
                    'editor',
                    'excerpt',
                    'author',
                    'thumbnail',
                    'comments',
                    'trackbacks',
                    'custom-fields',
                    'revisions',
                    'page-attributes',
                    'post-formats',
                ),
                'custom_caps'           => true,
                'custom_caps_users'     => array(
                    'administrator',
                ),
                'taxonomies'            => array(
                    array(
                        'taxonomy'          => 'food_menu_item_category',
                        'plural'            => 'Food Menu Item Categories',
                        'single'            => 'Food Menu Item Category',
                        'post_types'        => array( 'Food Menu Item' ),
                    ),
                ),
            ),
        );

        foreach ( $food_menu_item_fields as $fields ) {
            $this->register_single_post_type( $fields );
        }
        // ...
    }
    // ...

}
?>

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Browse other questions tagged or ask your own question.