Ejemplo n.º 1
0
  public static function register_post_types() {
    
    global $blog_id;
    global $wp_post_types;
    
    // here comes the magic

    $standard_supports = array('title', 'editor', 'author', 'thumbnail', 'excerpt', 'trackbacks', 'custom-fields', 'comments', 'revisions', 'page-attributes', 'post-formats');
    
    self::$front_page_post_types = array("page");
     
    foreach (MasterPress::$post_types as $post_type) {
      
      add_filter( 'views_edit-'.$post_type->name, array("MPC_Post", "manage_posts_views") );
  
      if (in_array("front-page", explode(",", $post_type->supports))) {
        self::$front_page_post_types[] = $post_type->name;
      }

      MPU::create_icon_sprite($post_type->menu_icon, "");

      if (!$post_type->_builtin) {
        
        if (!$post_type->disabled) {
          
          
          // check for any external post types that are no longer defined here
          
    
          if ($post_type->in_current_site()) {
          
            if (!$post_type->_external) {
              
              $labels = $post_type->labels;
            
              if (!isset($labels["all_items"]) || $labels["all_items"] == "") {
                $labels["all_items"] = $labels["name"];
              }
              
              $params = array(
                "show_ui" => true,
                "show_in_menu" => (bool) $post_type->show_in_menu,
                "label" => $post_type->plural_name,
                "public" => true,
                "publicly_queryable" => (bool) $post_type->publicly_queryable,
                "menu_position" => (int) $post_type->menu_position,
                "show_in_nav_menus" => (bool) $post_type->show_in_nav_menus, 
                "exclude_from_search" => (bool) $post_type->exclude_from_search,
                "labels" => $labels,
                "map_meta_cap" => (bool) $post_type->map_meta_cap,
                "hierarchical" => (bool) $post_type->hierarchical,
                "supports" => explode(",", $post_type->supports),
                "taxonomies" => array(),
                "permalink_epmask" => $post_type->permalink_epmask(),
                "has_archive" => (bool) $post_type->has_archive,
                "rewrite" => $post_type->rewrite,
                "query_var" => (bool) $post_type->query_var,
                "can_export" => (bool) $post_type->can_export,
                "capability_type" => $post_type->capability_type,
                "description" => $post_type->description
              );
              
                          
              if ($post_type->menu_icon != "") {
                $menu_icon = MPU::menu_icon($post_type->menu_icon, false);
                
                if ($menu_icon->exists()) {
                  $params["menu_icon"] = MPU::img_url("blank.gif");
                }
              }


              if ($post_type->capabilities && $post_type->capabilities != "") {
                $params["capabilities"] = $post_type->capabilities;
              }
               
              $register = apply_filters( "mp_can_register_post_type_{$post_type->name}", true );
              $register = apply_filters( "mp_can_register_post_type", $register, $post_type->name );
              
              if ( $register ) {
              
                $params = apply_filters( "mp_register_post_type_params", $params, $post_type->name );
                $params = apply_filters( "mp_register_post_type_params_{$post_type->name}", $params );
                
                register_post_type( 
                  $post_type->name, 
                  $params
                );
              
                remove_post_type_support($post_type->name, "custom-fields");
              }
              
            } 
          
          }
        
        }
      
      } else {

        if ($post_type->disabled) {
          
          if (!$post_type->in_current_site()) {
            self::unregister_post_type($post_type->name);
          }
        
        } else {
          
          // add or remove support from the built-in post types 
        
          $supports = explode(",", $post_type->supports);

          $remove_supports = array_diff($standard_supports, $supports);
          $add_supports = array_diff($supports, $standard_supports);
          
          foreach ($add_supports as $support) {
            add_post_type_support($post_type->name, $support);
          }

          foreach ($remove_supports as $support) {
            remove_post_type_support($post_type->name, $support);
          }
        
        }
        
        // label overrides
        
        $pto = &$wp_post_types[$post_type->name];

        foreach ($post_type->labels as $key => $value) {
          $pto->labels->$key = $value;
        }


        
      }
      
      if (self::is_post_editor()) {

        $supports = explode(",", $post_type->supports);
        
        if (in_array("page-attributes", $supports) || $post_type->name == "page") {
        
          remove_post_type_support($post_type->name, "page-attributes");
          add_post_type_support($post_type->name, "mp-page-attributes");
        }
      }
    
      
    } // endforeach
      
  }