WordPress.org

Ready to get started?Download WordPress

Forums

Custom Post Type UI
[resolved] Add custom write panel don't work (4 posts)

  1. Davide Tommasin
    Member
    Posted 3 years ago #

    Hi,
    I created some custom post types using the Custom Post Type UI plugin.
    Now, I want insert a box where editors can find custom fileds.

    I see this box on write panel for article, but i don't see it on write panels for taxonomy.

    I used Custom Field Template plugin, but dont' work.

    I have follow this howto http://wefunction.com/2008/10/tutorial-creating-custom-write-panels-in-wordpress/, also this don't work.

    Suggestions?

    PS: sorry for my english :)

  2. Davide Tommasin
    Member
    Posted 3 years ago #

    I find the solution :)
    It's simple. I have used this code for implement meta box:

    // add a meta box for each of the wordpress page types: posts and pages and other custom post type
    	foreach (array('post','page', 'books', 'movies', 'products') as $type)
    	{
    		add_meta_box('my_all_meta', 'My custom box', 'my_meta_setup', $type, 'normal', 'high');
    	}
  3. web00132
    Member
    Posted 3 years ago #

    Hi kinghack!
    I've got the exact same problem as you did! Where did you put that piece of code?
    I tried to put it straight into the functions.php file but that made the whole site crash.
    Thanks!

  4. Davide Tommasin
    Member
    Posted 3 years ago #

    Hi, web00132

    I put this code on function.php and it work perfectly.

    function my_meta_init()
    {
    	// review the function reference for parameter details
    	// http://codex.wordpress.org/Function_Reference/wp_enqueue_script
    	// http://codex.wordpress.org/Function_Reference/wp_enqueue_style
    
    	//wp_enqueue_script('my_meta_js', MY_THEME_PATH . '/custom/meta.js', array('jquery'));
    	wp_enqueue_style('my_meta_css', MY_THEME_PATH . '/custom/meta.css');
    
    	// review the function reference for parameter details
    	// http://codex.wordpress.org/Function_Reference/add_meta_box
    
    	// add a meta box for each of the wordpress page types: posts and pages
    	foreach (array('post','page', 'books', 'movies') as $type)
    	{
    		add_meta_box('my_all_meta', 'My custom box', 'my_meta_setup', $type, 'normal', 'high');
    	}
    
    	// add a callback function to save any data a user enters in
    	add_action('save_post','my_meta_save');
    }
    
    function my_meta_setup()
    {
    	global $post;
    
    	// using an underscore, prevents the meta variable
    	// from showing up in the custom fields section
    	$meta = get_post_meta($post->ID,'_my_meta',TRUE);
    
    	// instead of writing HTML here, lets do an include
    	include(MY_THEME_FOLDER . '/custom/meta.php');
    
    	// create a custom nonce for submit verification later
    	echo '<input type="hidden" name="my_meta_noncename" value="' . wp_create_nonce(__FILE__) . '" />';
    }
    
    function my_meta_save($post_id)
    {
    	// authentication checks
    
    	// make sure data came from our meta box
    	if (!wp_verify_nonce($_POST['my_meta_noncename'],__FILE__)) return $post_id;
    
    	// check user permissions
    	if ($_POST['post_type'] == 'page')
    	{
    		if (!current_user_can('edit_page', $post_id)) return $post_id;
    	}
    	else
    	{
    		if (!current_user_can('edit_post', $post_id)) return $post_id;
    	}
    
    	// authentication passed, save data
    
    	// var types
    	// single: _my_meta[var]
    	// array: _my_meta[var][]
    	// grouped array: _my_meta[var_group][0][var_1], _my_meta[var_group][0][var_2]
    
    	$current_data = get_post_meta($post_id, '_my_meta', TRUE);	
    
    	$new_data = $_POST['_my_meta'];
    
    	my_meta_clean($new_data);
    
    	if ($current_data)
    	{
    		if (is_null($new_data)) delete_post_meta($post_id,'_my_meta');
    		else update_post_meta($post_id,'_my_meta',$new_data);
    	}
    	elseif (!is_null($new_data))
    	{
    		add_post_meta($post_id,'_my_meta',$new_data,TRUE);
    	}
    
    	return $post_id;
    }
    
    function my_meta_clean(&$arr)
    {
    	if (is_array($arr))
    	{
    		foreach ($arr as $i => $v)
    		{
    			if (is_array($arr[$i]))
    			{
    				my_meta_clean($arr[$i]);
    
    				if (!count($arr[$i]))
    				{
    					unset($arr[$i]);
    				}
    			}
    			else
    			{
    				if (trim($arr[$i]) == '')
    				{
    					unset($arr[$i]);
    				}
    			}
    		}
    
    		if (!count($arr))
    		{
    			$arr = NULL;
    		}
    	}
    }

    Bye

Topic Closed

This topic has been closed to new replies.

About this Plugin

About this Topic