Example #1
0
 /**
  * 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;
            }
        }
    }
}