自定义邮政类型分类未显示

时间:2020-01-05 作者:Dan Sutherland

我有一个基于Wordpress插件Boiler Plate注册帖子类型的类,下面有谁能告诉我为什么分类法根本没有显示在管理菜单中?

/**
 * 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 );
        }
        // ...
    }
    // ...

}
?>

2 个回复
SO网友:Carlos Faria

\'post_types\' => array( \'Food Menu Item\' )

should be

\'post_types\' => array( \'food-menu-item\' )

SO网友:Khalid Almallahi

您添加了一个post类型的可读名称,而不是实际名称:

\'post_types\'        => array( \'Food Menu Item\' ) 
替换为:

\'post_types\'        => array( \'food-menu-item\' )

相关推荐