/** * Init WooCommerce taxonomies. * * @access public * @return void */ public function init_taxonomy() { if (post_type_exists('product')) { return; } /** * Slugs **/ $permalinks = get_option('woocommerce_permalinks'); $shop_page_id = woocommerce_get_page_id('shop'); // Base slug is also used for the product post type archive $base_slug = $shop_page_id > 0 && get_page($shop_page_id) ? get_page_uri($shop_page_id) : 'shop'; // Get bases $product_category_slug = empty($permalinks['category_base']) ? _x('product-category', 'slug', 'woocommerce') : $permalinks['category_base']; $product_tag_slug = empty($permalinks['tag_base']) ? _x('product-tag', 'slug', 'woocommerce') : $permalinks['tag_base']; $product_attribute_base = empty($permalinks['attribute_base']) ? '' : trailingslashit($permalinks['attribute_base']); $product_permalink = empty($permalinks['product_base']) ? _x('product', 'slug', 'woocommerce') : $permalinks['product_base']; if ($product_permalink) { $rewrite = array('slug' => untrailingslashit($product_permalink), 'with_front' => false, 'feeds' => true); } else { $rewrite = false; } $show_in_menu = current_user_can('manage_woocommerce') ? 'woocommerce' : true; /** * Taxonomies **/ do_action('woocommerce_register_taxonomy'); $admin_only_query_var = is_admin(); register_taxonomy('product_type', apply_filters('woocommerce_taxonomy_objects_product_type', array('product')), apply_filters('woocommerce_taxonomy_args_product_type', array('hierarchical' => false, 'update_count_callback' => '_update_post_term_count', 'show_ui' => false, 'show_in_nav_menus' => false, 'query_var' => $admin_only_query_var, 'rewrite' => false))); register_taxonomy('product_cat', apply_filters('woocommerce_taxonomy_objects_product_cat', array('product')), apply_filters('woocommerce_taxonomy_args_product_cat', array('hierarchical' => true, 'update_count_callback' => '_woocommerce_term_recount', 'label' => __('Product Categories', 'woocommerce'), 'labels' => array('name' => __('Product Categories', 'woocommerce'), 'singular_name' => __('Product Category', 'woocommerce'), 'menu_name' => _x('Categories', 'Admin menu name', 'woocommerce'), 'search_items' => __('Search Product Categories', 'woocommerce'), 'all_items' => __('All Product Categories', 'woocommerce'), 'parent_item' => __('Parent Product Category', 'woocommerce'), 'parent_item_colon' => __('Parent Product Category:', 'woocommerce'), 'edit_item' => __('Edit Product Category', 'woocommerce'), 'update_item' => __('Update Product Category', 'woocommerce'), 'add_new_item' => __('Add New Product Category', 'woocommerce'), 'new_item_name' => __('New Product Category Name', 'woocommerce')), 'show_ui' => true, 'query_var' => true, 'capabilities' => array('manage_terms' => 'manage_product_terms', 'edit_terms' => 'edit_product_terms', 'delete_terms' => 'delete_product_terms', 'assign_terms' => 'assign_product_terms'), 'rewrite' => array('slug' => $product_category_slug, 'with_front' => false, 'hierarchical' => true)))); register_taxonomy('product_tag', apply_filters('woocommerce_taxonomy_objects_product_tag', array('product')), apply_filters('woocommerce_taxonomy_args_product_tag', array('hierarchical' => false, 'update_count_callback' => '_woocommerce_term_recount', 'label' => __('Product Tags', 'woocommerce'), 'labels' => array('name' => __('Product Tags', 'woocommerce'), 'singular_name' => __('Product Tag', 'woocommerce'), 'menu_name' => _x('Tags', 'Admin menu name', 'woocommerce'), 'search_items' => __('Search Product Tags', 'woocommerce'), 'all_items' => __('All Product Tags', 'woocommerce'), 'parent_item' => __('Parent Product Tag', 'woocommerce'), 'parent_item_colon' => __('Parent Product Tag:', 'woocommerce'), 'edit_item' => __('Edit Product Tag', 'woocommerce'), 'update_item' => __('Update Product Tag', 'woocommerce'), 'add_new_item' => __('Add New Product Tag', 'woocommerce'), 'new_item_name' => __('New Product Tag Name', 'woocommerce')), 'show_ui' => true, 'query_var' => true, 'capabilities' => array('manage_terms' => 'manage_product_terms', 'edit_terms' => 'edit_product_terms', 'delete_terms' => 'delete_product_terms', 'assign_terms' => 'assign_product_terms'), 'rewrite' => array('slug' => $product_tag_slug, 'with_front' => false)))); register_taxonomy('product_shipping_class', apply_filters('woocommerce_taxonomy_objects_product_shipping_class', array('product', 'product_variation')), apply_filters('woocommerce_taxonomy_args_product_shipping_class', array('hierarchical' => true, 'update_count_callback' => '_update_post_term_count', 'label' => __('Shipping Classes', 'woocommerce'), 'labels' => array('name' => __('Shipping Classes', 'woocommerce'), 'singular_name' => __('Shipping Class', 'woocommerce'), 'menu_name' => _x('Shipping Classes', 'Admin menu name', 'woocommerce'), 'search_items' => __('Search Shipping Classes', 'woocommerce'), 'all_items' => __('All Shipping Classes', 'woocommerce'), 'parent_item' => __('Parent Shipping Class', 'woocommerce'), 'parent_item_colon' => __('Parent Shipping Class:', 'woocommerce'), 'edit_item' => __('Edit Shipping Class', 'woocommerce'), 'update_item' => __('Update Shipping Class', 'woocommerce'), 'add_new_item' => __('Add New Shipping Class', 'woocommerce'), 'new_item_name' => __('New Shipping Class Name', 'woocommerce')), 'show_ui' => true, 'show_in_nav_menus' => false, 'query_var' => $admin_only_query_var, 'capabilities' => array('manage_terms' => 'manage_product_terms', 'edit_terms' => 'edit_product_terms', 'delete_terms' => 'delete_product_terms', 'assign_terms' => 'assign_product_terms'), 'rewrite' => false))); register_taxonomy('shop_order_status', apply_filters('woocommerce_taxonomy_objects_shop_order_status', array('shop_order')), apply_filters('woocommerce_taxonomy_args_shop_order_status', array('hierarchical' => false, 'update_count_callback' => '_update_post_term_count', 'show_ui' => false, 'show_in_nav_menus' => false, 'query_var' => $admin_only_query_var, 'rewrite' => false))); global $wc_product_attributes; if ($attribute_taxonomies = $this->get_attribute_taxonomies()) { foreach ($attribute_taxonomies as $tax) { $name = $this->attribute_taxonomy_name($tax->attribute_name); $hierarchical = true; if ($name) { $label = isset($tax->attribute_label) && $tax->attribute_label ? $tax->attribute_label : $tax->attribute_name; $wc_product_attributes[$name] = $tax; $show_in_nav_menus = apply_filters('woocommerce_attribute_show_in_nav_menus', false, $name); register_taxonomy($name, apply_filters('woocommerce_taxonomy_objects_' . $name, array('product')), apply_filters('woocommerce_taxonomy_args_' . $name, array('hierarchical' => $hierarchical, 'update_count_callback' => '_update_post_term_count', 'labels' => array('name' => $label, 'singular_name' => $label, 'search_items' => __('Search', 'woocommerce') . ' ' . $label, 'all_items' => __('All', 'woocommerce') . ' ' . $label, 'parent_item' => __('Parent', 'woocommerce') . ' ' . $label, 'parent_item_colon' => __('Parent', 'woocommerce') . ' ' . $label . ':', 'edit_item' => __('Edit', 'woocommerce') . ' ' . $label, 'update_item' => __('Update', 'woocommerce') . ' ' . $label, 'add_new_item' => __('Add New', 'woocommerce') . ' ' . $label, 'new_item_name' => __('New', 'woocommerce') . ' ' . $label), 'show_ui' => false, 'query_var' => true, 'capabilities' => array('manage_terms' => 'manage_product_terms', 'edit_terms' => 'edit_product_terms', 'delete_terms' => 'delete_product_terms', 'assign_terms' => 'assign_product_terms'), 'show_in_nav_menus' => $show_in_nav_menus, 'rewrite' => array('slug' => $product_attribute_base . sanitize_title($tax->attribute_name), 'with_front' => false, 'hierarchical' => $hierarchical)))); } } } /** * Post Types **/ do_action('woocommerce_register_post_type'); register_post_type("product", apply_filters('woocommerce_register_post_type_product', array('labels' => array('name' => __('Products', 'woocommerce'), 'singular_name' => __('Product', 'woocommerce'), 'menu_name' => _x('Products', 'Admin menu name', 'woocommerce'), 'add_new' => __('Add Product', 'woocommerce'), 'add_new_item' => __('Add New Product', 'woocommerce'), 'edit' => __('Edit', 'woocommerce'), 'edit_item' => __('Edit Product', 'woocommerce'), 'new_item' => __('New Product', 'woocommerce'), 'view' => __('View Product', 'woocommerce'), 'view_item' => __('View Product', 'woocommerce'), 'search_items' => __('Search Products', 'woocommerce'), 'not_found' => __('No Products found', 'woocommerce'), 'not_found_in_trash' => __('No Products found in trash', 'woocommerce'), 'parent' => __('Parent Product', 'woocommerce')), 'description' => __('This is where you can add new products to your store.', 'woocommerce'), 'public' => true, 'show_ui' => true, 'capability_type' => 'product', 'map_meta_cap' => true, 'publicly_queryable' => true, 'exclude_from_search' => false, 'hierarchical' => false, 'rewrite' => $rewrite, 'query_var' => true, 'supports' => array('title', 'editor', 'excerpt', 'thumbnail', 'comments', 'custom-fields', 'page-attributes'), 'has_archive' => $base_slug, 'show_in_nav_menus' => true))); // Sort out attachment urls (removed, breaks pagination) no alternatives add_rewrite_rule( '^' . $attachment_base . '([^/]*)/([^/]*)/([^/]*)/?', 'index.php?attachment=$matches[3]', 'top' ); register_post_type("product_variation", apply_filters('woocommerce_register_post_type_product_variation', array('labels' => array('name' => __('Variations', 'woocommerce'), 'singular_name' => __('Variation', 'woocommerce'), 'add_new' => __('Add Variation', 'woocommerce'), 'add_new_item' => __('Add New Variation', 'woocommerce'), 'edit' => __('Edit', 'woocommerce'), 'edit_item' => __('Edit Variation', 'woocommerce'), 'new_item' => __('New Variation', 'woocommerce'), 'view' => __('View Variation', 'woocommerce'), 'view_item' => __('View Variation', 'woocommerce'), 'search_items' => __('Search Variations', 'woocommerce'), 'not_found' => __('No Variations found', 'woocommerce'), 'not_found_in_trash' => __('No Variations found in trash', 'woocommerce'), 'parent' => __('Parent Variation', 'woocommerce')), 'public' => true, 'show_ui' => false, 'capability_type' => 'product', 'map_meta_cap' => true, 'publicly_queryable' => false, 'exclude_from_search' => true, 'hierarchical' => false, 'rewrite' => false, 'query_var' => true, 'supports' => array('title', 'editor', 'custom-fields', 'page-attributes', 'thumbnail'), 'show_in_nav_menus' => false))); $menu_name = _x('Orders', 'Admin menu name', 'woocommerce'); if ($order_count = woocommerce_processing_order_count()) { $menu_name .= " <span class='awaiting-mod update-plugins count-{$order_count}'><span class='processing-count'>" . number_format_i18n($order_count) . "</span></span>"; } register_post_type("shop_order", apply_filters('woocommerce_register_post_type_shop_order', array('labels' => array('name' => __('Orders', 'woocommerce'), 'singular_name' => __('Order', 'woocommerce'), 'add_new' => __('Add Order', 'woocommerce'), 'add_new_item' => __('Add New Order', 'woocommerce'), 'edit' => __('Edit', 'woocommerce'), 'edit_item' => __('Edit Order', 'woocommerce'), 'new_item' => __('New Order', 'woocommerce'), 'view' => __('View Order', 'woocommerce'), 'view_item' => __('View Order', 'woocommerce'), 'search_items' => __('Search Orders', 'woocommerce'), 'not_found' => __('No Orders found', 'woocommerce'), 'not_found_in_trash' => __('No Orders found in trash', 'woocommerce'), 'parent' => __('Parent Orders', 'woocommerce'), 'menu_name' => $menu_name), 'description' => __('This is where store orders are stored.', 'woocommerce'), 'public' => false, 'show_ui' => true, 'capability_type' => 'shop_order', 'map_meta_cap' => true, 'publicly_queryable' => false, 'exclude_from_search' => true, 'show_in_menu' => $show_in_menu, 'hierarchical' => false, 'show_in_nav_menus' => false, 'rewrite' => false, 'query_var' => false, 'supports' => array('title', 'comments', 'custom-fields'), 'has_archive' => false))); register_post_type("shop_coupon", apply_filters('woocommerce_register_post_type_shop_coupon', array('labels' => array('name' => __('Coupons', 'woocommerce'), 'singular_name' => __('Coupon', 'woocommerce'), 'menu_name' => _x('Coupons', 'Admin menu name', 'woocommerce'), 'add_new' => __('Add Coupon', 'woocommerce'), 'add_new_item' => __('Add New Coupon', 'woocommerce'), 'edit' => __('Edit', 'woocommerce'), 'edit_item' => __('Edit Coupon', 'woocommerce'), 'new_item' => __('New Coupon', 'woocommerce'), 'view' => __('View Coupons', 'woocommerce'), 'view_item' => __('View Coupon', 'woocommerce'), 'search_items' => __('Search Coupons', 'woocommerce'), 'not_found' => __('No Coupons found', 'woocommerce'), 'not_found_in_trash' => __('No Coupons found in trash', 'woocommerce'), 'parent' => __('Parent Coupon', 'woocommerce')), 'description' => __('This is where you can add new coupons that customers can use in your store.', 'woocommerce'), 'public' => true, 'show_ui' => true, 'capability_type' => 'shop_coupon', 'map_meta_cap' => true, 'publicly_queryable' => false, 'exclude_from_search' => true, 'show_in_menu' => $show_in_menu, 'hierarchical' => false, 'rewrite' => false, 'query_var' => false, 'supports' => array('title'), 'show_in_nav_menus' => false))); }
/** * Highlights the correct top level admin menu item for post type add screens. * * @access public * @return void */ function woocommerce_admin_menu_highlight() { global $menu, $submenu, $parent_file, $submenu_file, $self, $post_type, $taxonomy; $to_highlight_types = array('shop_order', 'shop_coupon'); if (isset($post_type)) { if (in_array($post_type, $to_highlight_types)) { $submenu_file = 'edit.php?post_type=' . esc_attr($post_type); $parent_file = 'woocommerce'; } if ('product' == $post_type) { $screen = get_current_screen(); if ($screen->base == 'edit-tags' && 'pa_' == substr($taxonomy, 0, 3)) { $submenu_file = 'woocommerce_attributes'; $parent_file = 'edit.php?post_type=' . esc_attr($post_type); } } } if (isset($submenu['woocommerce']) && isset($submenu['woocommerce'][2])) { $submenu['woocommerce'][0] = $submenu['woocommerce'][2]; unset($submenu['woocommerce'][2]); } // Sort out Orders menu when on the top level if (!current_user_can('manage_woocommerce')) { foreach ($menu as $key => $menu_item) { if (strpos($menu_item[0], _x('Orders', 'Admin menu name', 'woocommerce')) === 0) { $menu_name = _x('Orders', 'Admin menu name', 'woocommerce'); $menu_name_count = ''; if ($order_count = woocommerce_processing_order_count()) { $menu_name_count = " <span class='awaiting-mod update-plugins count-{$order_count}'><span class='processing-count'>" . number_format_i18n($order_count) . "</span></span>"; } $menu[$key][0] = $menu_name . $menu_name_count; $submenu['edit.php?post_type=shop_order'][5][0] = $menu_name; break; } } } }