• I would like to use the Custom Content Type Manager on a Multisite installation.

    Is there a way to hide the Custom Content Types menu that contains the Custom Fields, Global Settings and Tools menus from the end users.

Viewing 15 replies - 1 through 15 (of 33 total)
  • You can hide the menus under each content type (under CCTM –> Global Settings), but not the menu items under the main Custom Content Type menu — if your users don’t have permissions to manage options, then those menu items shouldn’t appear at all. That’s really the only way to handle menus: via WP permissions. It’d be both reinventing the wheel and shooting yourself in the foot if you hid menu items that allow you to control the plugin and its settings. So just lock down the permissions of your users.

    Thread Starter carla_chalmers

    (@txhorselady)

    I guess I am just having a problem getting my head around how to limit the permissions of the users. The owners of each site will be administrators but also generally novice users that really don’t need to see the much of the inner workings of the site. I would only like them to be able to see the actual custom post type but not have the ability to create new post types or custom fields.

    Hmmm…. that’s a tricky use case. WP permissions are nice because their simplistic, but they’re also limited. I don’t have much experience with multi-site installations.

    The hack-y solution to this would be to edit your wp-content/plugins/custom-content-type-manager/loader.php file and comment out the following line:

    add_action('admin_menu', 'CCTM::create_admin_menu');

    But the larger question is whether or not WP has a “super-user” role for multi-site installations — the one admin to rule them all. In a multi-site installation, this would be the one admin who controlled all the other admins. Looks like there is such a thing:

    http://codex.wordpress.org/Super_Admin_Admin_Screen

    But the docs are incomplete. This would be a good feature request since only the one super-admin should have privileges to set up the custom content types.

    Thread Starter carla_chalmers

    (@txhorselady)

    Yes it is a bit tricky. There is a super admin in multisite but it doesn’t seem to help me much.

    I absolutely love your plugin but it looks like I might have to write my own to handle this scenario. I will be using yours many times in my single site installations in the future.

    I haven’t tested the CCTM on a multi-site instance, so your feedback is valued.

    Here’s what I would try (if the little hack isn’t going to work for you):

    Inside the CCTM’s includes/CCTM.php file is a function that generates the menus. It’s a bunch of calls to add_menu_page() and add_submenu_page() functions. One of the arguments to that function is the “capability” — currently it’s set to ‘manage_options’, but if you changed that to “manage_network”, I think it’d do what you wanted. See http://codex.wordpress.org/Roles_and_Capabilities#Super_Admin

    So I think the feature request should be to make the capability a variable: if it’s a multi-site installation, use the “manage_network” capability for the menu, otherwise stick to the “manage_options” capability.

    If you can try it, I can make the edits quickly and include them in the 0.9.5 release (coming out any day now).

    I added the feature request:

    http://code.google.com/p/wordpress-custom-content-type-manager/issues/detail?id=260

    If you can test whether the above solution works for you, it’d be awesome. Thanks!

    Thread Starter carla_chalmers

    (@txhorselady)

    I’ll give this a try later this afternoon and get back to you. Thank you so much for your help

    Thread Starter carla_chalmers

    (@txhorselady)

    Well commenting out the <strong>add_action('admin_menu','CCTM::create_admin_menu');</strong> line of code worked but I’m not sure if I will be able to use this approach. This particular multisite installation will be designed so that users can automatically create their own sites and we are anticipating over 1000 sites to be created.

    Maybe I could use a site clone plugin to create each site.

    Wow… that’s impressive. I barely trust WP for one site, let alone thousands haha… the WP architecture is so shaky in places.

    I’m still not 100% sure what you expect your admin users to be capable of, but I still think the implementation here hinges on the WP permissions available to you. Have you tried replacing the “manage_options” permissions for each menu item with the “manage_network” permissions? That should give one user (you?) control over all the CCTM details, but perhaps you need one user *per site* to have that control. That might take some more serious digging into the WP permissions schema.

    One related approach I could take here would be to put the configuration of the menu items into an external file — that way you could override the default behavior to match what your setup needed. Maybe together with the “manage_network” permissions, you could customize the admin menu however it needs to be for your site.

    Thread Starter carla_chalmers

    (@txhorselady)

    The users (creators) of these sites will have very little knowledge if at all. They basically are after pre designed sites that they can plug their information into. Basically I am needing to provide a custom post/page type that provides the structure to input horse pedigrees. There are pedigree plugins but they are pretty ‘nasty’ in their implementation and output. At the moment I already have around 500 people who who have signed up as being interested in the type of “canned” to advertise their horse businesses.

    I haven’t tried the “manage-network” permissions yet but hope to get a chance tomorrow.

    Nice! Well done! That’s impressive that you’ve got 500 people signed up — you must know something about business to organize that many users.

    Try the “manage_network” permission in the admin menu, and see if that doesn’t work. I’m writing another tech book here, but I haven’t gotten to the chapter where I need to dig into WP’s multi-site options. Hopefully that capability will solve it.

    Keep me posted…

    Everett

    Thread Starter carla_chalmers

    (@txhorselady)

    OK …. got it. Since you pointed me to the code used to display the Custom Content Types admin menu I just encased it in `if(is_super_admin() )’ like this:

    if (is_super_admin() ) {
    		// Main menu item
    		add_menu_page(
    			__('Manage Custom Content Types', CCTM_TXTDOMAIN),  // page title
    			__('Custom Content Types', CCTM_TXTDOMAIN),      // menu title
    			'manage_options',              // capability
    			'cctm',            // menu-slug (should be unique)
    			'CCTM::page_main_controller',        // callback function
    			CCTM_URL .'/images/gear.png',        // Icon
    			self::menu_position         // menu position
    		);
    
    		add_submenu_page(
    			'cctm',          // parent slug (menu-slug from add_menu_page call)
    			__('CCTM Custom Fields', CCTM_TXTDOMAIN),  // page title
    			__('Custom Fields', CCTM_TXTDOMAIN),   // menu title
    			'manage_options',        // capability
    			'cctm_fields',         // menu_slug: cf = custom fields
    			'CCTM::page_main_controller'     // callback function
    		);
    
    		add_submenu_page(
    			'cctm',         // parent slug (menu-slug from add_menu_page call)
    			__('CCTM Global Settings', CCTM_TXTDOMAIN),  // page title
    			__('Global Settings', CCTM_TXTDOMAIN),   // menu title
    			'manage_options',       // capability
    			'cctm_settings',       // menu_slug
    			'CCTM::page_main_controller'    // callback function
    		);
    
    		/*
    		add_submenu_page(
    			'cctm', 								// parent slug (menu-slug from add_menu_page call)
    			__('CCTM Themes', CCTM_TXTDOMAIN), 		// page title
    			__('Themes', CCTM_TXTDOMAIN), 			// menu title
    			'manage_options', 						// capability
    			'cctm_themes',  						// menu_slug
    			'CCTM::page_main_controller' 			// callback function
    		);
    */
    
    		add_submenu_page(
    			'cctm',         // parent slug (menu-slug from add_menu_page call)
    			__('CCTM Tools', CCTM_TXTDOMAIN),   // page title
    			__('Tools', CCTM_TXTDOMAIN),    // menu title
    			'manage_options',       // capability
    			'cctm_tools',        // menu_slug
    			'CCTM::page_main_controller'    // callback function
    		);
    
    		/*
    		add_submenu_page(
    			'cctm', 								// parent slug (menu-slug from add_menu_page call)
    			__('CCTM Information', CCTM_TXTDOMAIN), // page title
    			__('Info', CCTM_TXTDOMAIN), 			// menu title
    			'manage_options', 						// capability
    			'cctm_info', 							// menu_slug
    			'CCTM::page_main_controller' 			// callback function
    		);
    */
    
    		/*
    		add_submenu_page(
    			'cctm',				 					// parent slug (menu-slug from add_menu_page call)
    			__('CCTM Store', CCTM_TXTDOMAIN), 		// page title
    			__('Store', CCTM_TXTDOMAIN), 			// menu title
    			'manage_options', 						// capability
    			'cctm_store', 							// menu_slug
    			'CCTM::page_main_controller' 			// callback function
    		);
    
    		add_submenu_page(
    			'cctm',				 					// parent slug (menu-slug from add_menu_page call)
    			__('CCTM Help', CCTM_TXTDOMAIN), 		// page title
    			__('Help', CCTM_TXTDOMAIN), 			// menu title
    			'manage_options', 						// capability
    			'cctm_help',					 		// menu_slug
    			'CCTM::page_main_controller' 			// callback function
    		);
    
    	add_submenu_page(
    		'themes.php'
    		, _x('Editor', 'theme editor')
    		, _x('Editor', 'theme editor')
    		, 'edit_themes'
    		, 'theme-editor.php');
    	add_submenu_page(
    		$ptype_obj->show_in_menu,
    		$ptype_obj->labels->name,
    		$ptype_obj->labels->all_items,
    		$ptype_obj->cap->edit_posts
    		, "edit.php?post_type=$ptype" );
    
    */
    		// print '<pre>'; print_r(self::$data); print '</pre>'; exit;
    		// Add Custom Fields links
    		if (self::get_setting('show_custom_fields_menu')) {
    			foreach ($active_post_types as $post_type) {
    				$parent_slug = 'edit.php?post_type='.$post_type;
    				if ($post_type == 'post') {
    					$parent_slug = 'edit.php';
    				}
    				add_submenu_page(
    					$parent_slug
    					, __('Custom Fields', CCTM_TXTDOMAIN)
    					, __('Custom Fields', CCTM_TXTDOMAIN)
    					, 'manage_options'
    					, 'cctm&a=list_pt_associations&pt='.$post_type
    					, 'CCTM::page_main_controller'
    				);
    			}
    		}
    
    		// Add Settings links
    		if (self::get_setting('show_settings_menu')) {
    			foreach ($active_post_types as $post_type) {
    				$parent_slug = 'edit.php?post_type='.$post_type;
    				if ( in_array($post_type, self::$reserved_post_types) ) {
    					continue;
    				}
    				add_submenu_page(
    					$parent_slug
    					, __('Settings', CCTM_TXTDOMAIN)
    					, __('Settings', CCTM_TXTDOMAIN)
    					, 'manage_options'
    					, 'cctm&a=edit_post_type&pt='.$post_type
    					, 'CCTM::page_main_controller'
    				);
    			}
    		}
    		}
    	}

    Brilliant. So that worked for you?

    Thread Starter carla_chalmers

    (@txhorselady)

    Now I just have to figure out how to automatically use pass the Pedigree custom post type to a new site when it is created. Any ideas?

    Also, since the change in my code will probably be changed when you update the plugin will a wordpress override work on it?

    Thread Starter carla_chalmers

    (@txhorselady)

    Yes it worked. The Custom Content Type menu hides when I am logged in as a regular site administrator or user but shows up when logged in as the super admin

Viewing 15 replies - 1 through 15 (of 33 total)
  • The topic ‘[Plugin: Custom Content Type Manager] Multisite’ is closed to new replies.