Example #1
0
/**
 * Registers custom meta keys with WordPress and provides callbacks for sanitizing and authorizing 
 * the metadata.
 *
 * @since  1.0.0
 * @access public
 * @return void
 */
function mb_register_meta()
{
    /* General post meta. */
    register_meta('post', mb_get_prev_status_meta_key(), 'sanitize_key', '__return_true');
    /* Forum meta. */
    register_meta('post', mb_get_forum_activity_datetime_meta_key(), 'esc_html', '__return_true');
    register_meta('post', mb_get_forum_activity_datetime_epoch_meta_key(), 'esc_html', '__return_true');
    register_meta('post', mb_get_forum_last_topic_id_meta_key(), 'absint', '__return_true');
    register_meta('post', mb_get_forum_last_reply_id_meta_key(), 'absint', '__return_true');
    register_meta('post', mb_get_forum_subforum_count_meta_key(), 'absint', '__return_true');
    register_meta('post', mb_get_forum_topic_count_meta_key(), 'absint', '__return_true');
    register_meta('post', mb_get_forum_reply_count_meta_key(), 'absint', '__return_true');
    register_meta('post', mb_get_forum_type_meta_key(), 'esc_html', '__return_true');
    register_meta('post', mb_get_forum_level_meta_key(), 'absint', '__return_true');
    /* Topic meta. */
    register_meta('post', mb_get_topic_activity_datetime_meta_key(), 'esc_html', '__return_true');
    register_meta('post', mb_get_topic_activity_datetime_epoch_meta_key(), 'esc_html', '__return_true');
    register_meta('post', mb_get_topic_last_reply_id_meta_key(), 'absint', '__return_true');
    register_meta('post', mb_get_topic_voices_meta_key(), 'esc_html', '__return_true');
    register_meta('post', mb_get_topic_voice_count_meta_key(), 'absint', '__return_true');
    register_meta('post', mb_get_topic_reply_count_meta_key(), 'absint', '__return_true');
    register_meta('post', mb_get_topic_type_meta_key(), 'esc_html', '__return_true');
    /* User meta. */
    register_meta('user', mb_get_user_forum_subscriptions_meta_key(), 'esc_html', '__return_true');
    register_meta('user', mb_get_user_topic_subscriptions_meta_key(), 'esc_html', '__return_true');
    register_meta('user', mb_get_user_topic_bookmarks_meta_key(), 'esc_html', '__return_true');
    register_meta('user', mb_get_user_forum_count_meta_key(), 'absint', '__return_true');
    register_meta('user', mb_get_user_topic_count_meta_key(), 'absint', '__return_true');
    register_meta('user', mb_get_user_reply_count_meta_key(), 'absint', '__return_true');
}
/**
 * Registers the team member meta with their sanitization functions
 */
function register_team_member_meta()
{
    register_meta('post', get_team_member_title_meta_key(), 'sanitize_text_field', '__return_true');
    register_meta('post', get_team_member_twitter_meta_key(), 'sanitize_text_field', '__return_true');
    register_meta('post', get_team_member_github_meta_key(), 'esc_url', '__return_true');
    register_meta('post', get_team_member_wordpress_meta_key(), 'esc_url', '__return_true');
}
/**
 * Registers the Project meta with their sanitization functions
 */
function register_project_meta()
{
    register_meta('post', get_project_tagline_meta_key(), 'sanitize_text_field', '__return_true');
    register_meta('post', get_project_github_meta_key(), 'esc_url', '__return_true');
    register_meta('post', get_project_lead_meta_key(), 'FZ_Projects\\Team_Members\\sanitize_team_member_id', '__return_true');
    register_meta('post', get_project_team_members_meta_key(), 'FZ_Projects\\Team_Members\\sanitize_team_member_id', '__return_true');
}
 /**
  * Registers all the hooks
  */
 function register_hooks()
 {
     // Hook in to URL generation
     $this->hook('page_link', 'link', 20);
     $this->hook('post_link', 'link', 20);
     $this->hook('post_type_link', 'link', 20);
     $this->hook('attachment_link', 'link', 20);
     // Non-standard priority hooks
     $this->hook('do_meta_boxes', 20);
     $this->hook('wp_footer', 19);
     $this->hook('wp_enqueue_scripts', 'start_buffer', -9999);
     $this->hook('wp_head', 'end_buffer', 9999);
     // Non-standard callback hooks
     $this->hook('load-post.php', 'load_post');
     // Standard hooks
     $this->hook('wp_list_pages');
     $this->hook('template_redirect');
     $this->hook('save_post');
     $this->hook('edit_attachment');
     $this->hook('wp_nav_menu_objects');
     $this->hook('plugin_row_meta');
     // Metadata validation grants users editing privileges for our custom fields
     register_meta('post', self::LINK_META_KEY, null, '__return_true');
     register_meta('post', self::TARGET_META_KEY, null, '__return_true');
 }
 public function metaFieldsRegister($fields)
 {
     foreach ($fields as $field) {
         $id = $field['id'];
         register_meta('post', $id, [$this, 'metaFieldsSanitize'], '__return_true');
     }
 }
/**
 * Registers custom metadata for the plugin.
 *
 * @since  0.1.0
 * @access public
 * @return void
 */
function ccp_register_meta()
{
    register_meta('post', 'url', 'esc_url_raw', '__return_false');
    register_meta('post', 'client', 'wp_strip_all_tags', '__return_false');
    register_meta('post', 'location', 'wp_strip_all_tags', '__return_false');
    register_meta('post', 'start_date', 'wp_strip_all_tags', '__return_false');
    register_meta('post', 'end_date', 'wp_strip_all_tags', '__return_false');
}
Example #7
0
 function test_sanitize_meta()
 {
     $meta = sanitize_meta('some_meta', 'unsanitized', 'post');
     $this->assertEquals('unsanitized', $meta);
     register_meta('post', 'some_meta', array($this, '_meta_sanitize_cb'));
     $meta = sanitize_meta('some_meta', 'unsanitized', 'post');
     $this->assertEquals('sanitized', $meta);
 }
Example #8
0
/**
 * Register activity metadata keys & sanitization callbacks
 *
 * @since 0.1.0
 */
function wp_user_activity_register_post_metadata()
{
    register_meta('post', 'wp_user_activity_object_type', 'wp_user_activity_sanitize_object_type');
    register_meta('post', 'wp_user_activity_object_subtype', 'wp_user_activity_sanitize_object_subtype');
    register_meta('post', 'wp_user_activity_object_name', 'wp_user_activity_sanitize_object_name');
    register_meta('post', 'wp_user_activity_object_id', 'wp_user_activity_sanitize_object_id');
    register_meta('post', 'wp_user_activity_action', 'wp_user_activity_sanitize_object_action');
}
 /**
  * Register the meta for the post types that support `genesis-simple-schema`.
  *
  * @since 0.9.0
  */
 public function register_meta()
 {
     foreach ((array) get_post_types(array('public' => true)) as $type) {
         foreach ((array) $this->custom_field_sanitization as $key => $sanitize_callback) {
             register_meta($type, $key, $sanitize_callback);
         }
     }
 }
Example #10
0
function prefix_portfolio_register_meta()
{
    /* Register post meta (note: you might want to alter the callbacks). */
    register_meta('post', 'url', 'esc_url_raw', '__return_false');
    register_meta('post', 'client', 'strip_tags', '__return_false');
    register_meta('post', 'location', 'strip_tags', '__return_false');
    register_meta('post', 'start_date', 'strip_tags', '__return_false');
    register_meta('post', 'end_date', 'strip_tags', '__return_false');
}
 function __construct($args)
 {
     /*
      * Use the built-in API to "register" meta,
      * i.e. set sanitization and authorization callbacks on the right filters.
      */
     register_meta('post', $args['key'], $args['sanitization_callback'], $args['authentication_callback']);
     foreach ($args as $key => $val) {
         $this->{$key} = $val;
     }
 }
 /**
  * Registers all postmeta keys used and assigns the default
  * method used for escaping when using add_post_meta or edit_post_meta
  * @access public
  */
 public function register_meta_keys()
 {
     register_meta('post', 'files_changed', 'absint');
     register_meta('post', 'branch', 'wp_kses');
     register_meta('post', 'commit_hash', 'wp_kses');
     register_meta('post', 'db_hash', 'wp_kses');
     register_meta('post', 'committed_files', array('Revisr_Admin', 'esc_attr_array'));
     register_meta('post', 'git_tag', 'esc_attr');
     register_meta('post', 'backup_method', 'esc_attr');
     register_meta('post', 'commit_status', 'esc_attr');
     register_meta('post', 'error_details', array('Revisr_Admin', 'esc_attr_array'));
 }
Example #13
0
/**
 * Register alert metadata keys & sanitization callbacks
 *
 * @since 0.1.0
 */
function wp_user_alerts_register_metadata()
{
    // Posts
    register_meta('post', 'wp_user_alerts_role', 'wp_user_alerts_sanitize_role');
    register_meta('post', 'wp_user_alerts_user', 'wp_user_alerts_sanitize_user');
    register_meta('post', 'wp_user_alerts_method', 'wp_user_alerts_sanitize_method');
    register_meta('post', 'wp_user_alerts_priority', 'wp_user_alerts_sanitize_priority');
    register_meta('post', 'wp_user_alerts_user_group', 'wp_user_alerts_sanitize_user_group');
    // Users
    register_meta('user', 'cellular_number', 'wp_user_alerts_sanitize_cellular_number');
    register_meta('user', 'cellular_carrier', 'wp_user_alerts_sanitize_cellular_carrier');
}
Example #14
0
 /**
  * Registers all event meta fields and their sanitization callbacks.
  * 
  * By defining this globally it is no longer necessary to manually sanitize data when
  * saving it to the database (eg. in the admin or during the import).
  *
  * @since 0.11
  * @return void
  */
 public function register_event_meta()
 {
     register_meta('post', 'event_date', array($this, 'sanitize_event_date'));
     register_meta('post', 'enddate', array($this, 'sanitize_enddate'));
     register_meta('post', 'venue', 'sanitize_text_field');
     register_meta('post', 'city', 'sanitize_text_field');
     register_meta('post', 'remark', 'sanitize_text_field');
     register_meta('post', 'tickets_url', 'sanitize_text_field');
     register_meta('post', 'tickets_button', 'sanitize_text_field');
     register_meta('post', 'tickets_status', 'sanitize_text_field');
     register_meta('post', '_wpt_event_tickets_price', array($this, 'sanitize_event_tickets_price'));
 }
Example #15
0
/**
 * Registers the framework's custom metadata keys and sets up the sanitize callback function.
 *
 * @since 0.9.0
 * @return void
 */
function omega_register_meta()
{
    /* Register meta if the theme supports the 'omega-template-hierarchy' feature. */
    if (current_theme_supports('omega-template-hierarchy')) {
        $post_types = get_post_types(array('public' => true));
        foreach ($post_types as $post_type) {
            if ('page' !== $post_type) {
                register_meta('post', "_wp_{$post_type}_template", 'omega_sanitize_meta');
            }
        }
    }
}
 /**
  * set up all actions for adding featured images to taxonomies
  * @since  2.0.0
  */
 public function set_taxonomy_meta()
 {
     register_meta('term', 'displayfeaturedimagegenesis', array($this, 'validate_taxonomy_image'));
     $args = array('public' => true);
     $output = 'names';
     $taxonomies = get_taxonomies($args, $output);
     foreach ($taxonomies as $taxonomy) {
         add_action("{$taxonomy}_add_form_fields", array($this, 'add_taxonomy_meta_fields'), 5, 2);
         add_action("{$taxonomy}_edit_form_fields", array($this, 'edit_taxonomy_meta_fields'), 5, 2);
         add_action("edited_{$taxonomy}", array($this, 'save_taxonomy_custom_meta'));
         add_action("create_{$taxonomy}", array($this, 'save_taxonomy_custom_meta'));
         add_action("edit_{$taxonomy}", array($this, 'save_taxonomy_custom_meta'));
         add_action('load-edit-tags.php', array($this, 'help'));
     }
     add_action('split_shared_term', array($this, 'split_shared_term'));
 }
Example #17
0
/**
 * Registers the framework's custom metadata keys and sets up the sanitize callback function.
 *
 * @since  1.3.0
 * @access public
 * @return void
 */
function hybrid_register_meta()
{
    // Register meta if the theme supports the 'hybrid-core-template-hierarchy' feature.
    if (current_theme_supports('hybrid-core-template-hierarchy')) {
        foreach (get_post_types(array('public' => true)) as $post_type) {
            if ('page' !== $post_type) {
                register_meta('post', "_wp_{$post_type}_template", 'sanitize_text_field', '__return_false');
            }
        }
    }
    // Theme layouts meta.
    if (current_theme_supports('theme-layouts')) {
        register_meta('post', hybrid_get_layout_meta_key(), 'sanitize_key', '__return_false');
        register_meta('user', hybrid_get_layout_meta_key(), 'sanitize_key', '__return_false');
    }
    // Post styles meta.
    register_meta('post', hybrid_get_style_meta_key(), 'sanitize_text_field', '__return_false');
}
 /**
  * Registers the meta for this field.
  *
  * This method should only be called on WordPress >= 4.6 since it uses the `register_meta()` function
  * with the new behavior introduced there.
  *
  * @since 0.6.5
  * @param WPPTD\Components\TermMetabox $parent_metabox the parent metabox component of this field
  * @param WPPTD\Components\Taxonomy $parent_taxonomy the parent taxonomy component of this field
  */
 public function register($parent_metabox = null, $parent_taxonomy = null)
 {
     // Do not register meta at this point, unless it is specifically enabled for the REST API.
     if (!$this->args['show_in_rest']) {
         return;
     }
     if (null === $parent_metabox) {
         $parent_metabox = $this->get_parent();
     }
     if (null === $parent_taxonomy) {
         $parent_taxonomy = $parent_metabox->get_parent();
     }
     $show_in_rest = $this->args['show_in_rest'];
     if ($show_in_rest && !is_array($show_in_rest)) {
         $show_in_rest = array('name' => $this->args['title']);
     }
     $args = array('object_subtype' => $parent_taxonomy->slug, 'type' => $this->get_meta_type(), 'description' => !empty($this->args['rest_description']) ? $this->args['rest_description'] : $this->args['description'], 'single' => $this->is_meta_single(), 'auth_callback' => $this->args['rest_auth_callback'], 'show_in_rest' => $show_in_rest, 'default' => $this->args['default']);
     register_meta('term', $this->slug, $args);
 }
Example #19
0
/**
 * Registers custom metadata for the plugin.
 *
 * @since  1.0.0
 * @access public
 * @return void
 */
function thds_register_meta()
{
    // URLs.
    register_meta('post', 'download_url', 'esc_url_raw', '__return_false');
    register_meta('post', 'demo_url', 'esc_url_raw', '__return_false');
    register_meta('post', 'repo_url', 'esc_url_raw', '__return_false');
    register_meta('post', 'purchase_url', 'esc_url_raw', '__return_false');
    register_meta('post', 'support_url', 'esc_url_raw', '__return_false');
    register_meta('post', 'docs_url', 'esc_url_raw', '__return_false');
    register_meta('post', 'translate_url', 'esc_url_raw', '__return_false');
    // Child themes.
    register_meta('post', 'parent_theme_id', 'absint', '__return_false');
    // back-compat - use post_parent
    register_meta('post', 'sample_child_theme', 'absint', '__return_false');
    // Other data.
    register_meta('post', 'wporg_slug', 'sanitize_title_with_dashes', '__return_false');
    //register_meta( 'post', 'github_slug',     'strip_tags',                 '__return_false' );
    register_meta('post', 'version', 'wp_filter_no_html_kses', '__return_false');
    register_meta('post', 'download_count', 'absint', '__return_false');
    //register_meta( 'post', 'edd_download_id', 'absint',                     '__return_false' );
}
Example #20
0
/**
 * Registers the framework's custom metadata keys and sets up the sanitize callback function.
 *
 * @since 1.3.0
 * @return void
 */
function hybrid_register_meta()
{
    /* Register meta if the theme supports the 'hybrid-core-seo' feature. */
    if (current_theme_supports('hybrid-core-seo')) {
        /* Register 'Title', 'Description', and 'Keywords' meta for posts. */
        register_meta('post', 'Title', 'hybrid_sanitize_meta');
        register_meta('post', 'Description', 'hybrid_sanitize_meta');
        register_meta('post', 'Keywords', 'hybrid_sanitize_meta');
        /* Register 'Title', 'Description', and 'Keywords' meta for users. */
        register_meta('user', 'Title', 'hybrid_sanitize_meta');
        register_meta('user', 'Description', 'hybrid_sanitize_meta');
        register_meta('user', 'Keywords', 'hybrid_sanitize_meta');
    }
    /* Register meta if the theme supports the 'hybrid-core-template-hierarchy' feature. */
    if (current_theme_supports('hybrid-core-template-hierarchy')) {
        $post_types = get_post_types(array('public' => true));
        foreach ($post_types as $post_type) {
            if ('page' !== $post_type) {
                register_meta('post', "_wp_{$post_type}_template", 'hybrid_sanitize_meta');
            }
        }
    }
}
Example #21
0
 /**
  * Register the post meta key and its sanizitzer
  *
  * Used by WordPress JSON API to expose programmatic editor beyond the post meta box display used in the HTML-based admin interface
  *
  * @since 1.0.0
  * @uses register_meta
  *
  * @return void
  */
 public static function registerPostMeta()
 {
     register_meta('post', static::META_KEY, array(__CLASS__, 'sanitizeFields'));
 }
/**
 * Registers the post stylesheets meta key ('Stylesheet') for posts and provides a function to sanitize
 * the metadata on update.
 *
 * @since 0.3.0
 * @access public
 * @return void
 */
function post_stylesheets_register_meta()
{
    register_meta('post', post_stylesheets_get_meta_key(), 'post_stylesheets_sanitize_meta');
}
 /**
  * Register our actions and filters
  *
  * @static
  * @return void
  */
 public static function init()
 {
     $options = WPSEO_Options::get_all();
     foreach (array('opengraph' => 'opengraph', 'twitter' => 'twitter', 'googleplus' => 'google-plus') as $option => $network) {
         if (true === $options[$option]) {
             foreach (array('title' => 'text', 'description' => 'textarea', 'image' => 'upload') as $box => $type) {
                 self::$meta_fields['social'][$network . '-' . $box] = array('type' => $type, 'title' => '', 'default_value' => '', 'description' => '');
             }
         }
     }
     /**
      * Allow add-on plugins to register their meta fields for management by this class
      * add_filter() calls must be made before plugins_loaded prio 14
      */
     $extra_fields = apply_filters('add_extra_wpseo_meta_fields', array());
     if (is_array($extra_fields)) {
         self::$meta_fields = self::array_merge_recursive_distinct($extra_fields, self::$meta_fields);
     }
     $register = function_exists('register_meta');
     foreach (self::$meta_fields as $subset => $field_group) {
         foreach ($field_group as $key => $field_def) {
             if ($field_def['type'] !== 'snippetpreview') {
                 /* register_meta() is undocumented and not used by WP internally, wrapped in
                    function_exists as a precaution in case they remove it. */
                 if ($register === true) {
                     register_meta('post', self::$meta_prefix . $key, array(__CLASS__, 'sanitize_post_meta'));
                 } else {
                     add_filter('sanitize_post_meta_' . self::$meta_prefix . $key, array(__CLASS__, 'sanitize_post_meta'), 10, 2);
                 }
                 // Set the $fields_index property for efficiency
                 self::$fields_index[self::$meta_prefix . $key] = array('subset' => $subset, 'key' => $key);
                 // Set the $defaults property for efficiency
                 if (isset($field_def['default_value'])) {
                     self::$defaults[self::$meta_prefix . $key] = $field_def['default_value'];
                 } else {
                     // meta will always be a string, so let's make the meta meta default also a string
                     self::$defaults[self::$meta_prefix . $key] = '';
                 }
             }
         }
     }
     add_filter('update_post_metadata', array(__CLASS__, 'remove_meta_if_default'), 10, 5);
     add_filter('add_post_metadata', array(__CLASS__, 'dont_save_meta_if_default'), 10, 4);
 }
	function test_post_meta_caps() {
		// simple tests for some common meta capabilities

		// Make our author
		$author = new WP_User( $this->factory->user->create( array( 'role' => 'author' ) ) );

		// make a post
		$post = $this->factory->post->create( array( 'post_author' => $author->ID, 'post_type' => 'post' ) );

		// the author of the post
		$this->assertTrue($author->exists(), "Problem getting user $author->ID");

		// add some other users
		$admin = new WP_User( $this->factory->user->create( array( 'role' => 'administrator' ) ) );
		$author_2 = new WP_User( $this->factory->user->create( array( 'role' => 'author' ) ) );
		$editor = new WP_User( $this->factory->user->create( array( 'role' => 'editor' ) ) );
		$contributor = new WP_User( $this->factory->user->create( array( 'role' => 'contributor' ) ) );

		// administrators, editors and the post owner can edit it
		$this->assertTrue($admin->has_cap('edit_post', $post));
		$this->assertTrue($author->has_cap('edit_post', $post));
		$this->assertTrue($editor->has_cap('edit_post', $post));
		// other authors and contributors can't
		$this->assertFalse($author_2->has_cap('edit_post', $post));
		$this->assertFalse($contributor->has_cap('edit_post', $post));

		// administrators, editors and the post owner can delete it
		$this->assertTrue($admin->has_cap('delete_post', $post));
		$this->assertTrue($author->has_cap('delete_post', $post));
		$this->assertTrue($editor->has_cap('delete_post', $post));
		// other authors and contributors can't
		$this->assertFalse($author_2->has_cap('delete_post', $post));
		$this->assertFalse($contributor->has_cap('delete_post', $post));

		// administrators, editors, and authors can publish it
		$this->assertTrue($admin->has_cap('publish_post', $post));
		$this->assertTrue($author->has_cap('publish_post', $post));
		$this->assertTrue($editor->has_cap('publish_post', $post));
		$this->assertTrue($author_2->has_cap('publish_post', $post));
		// contributors can't
		$this->assertFalse($contributor->has_cap('publish_post', $post));

		register_post_type( 'something', array( 'capabilities' => array( 'edit_posts' => 'draw_somethings' ) ) );
		$something = get_post_type_object( 'something' );
		$this->assertEquals( 'draw_somethings', $something->cap->edit_posts );
		$this->assertEquals( 'draw_somethings', $something->cap->create_posts );

		register_post_type( 'something', array( 'capabilities' =>
						array( 'edit_posts' => 'draw_somethings', 'create_posts' => 'create_somethings' ) ) );
		$something = get_post_type_object( 'something' );
		$this->assertEquals( 'draw_somethings', $something->cap->edit_posts );
		$this->assertEquals( 'create_somethings', $something->cap->create_posts );
		_unregister_post_type( 'something' );

		// Test meta authorization callbacks
		if ( function_exists( 'register_meta') ) {
			$this->assertTrue( $admin->has_cap('edit_post_meta',  $post) );
			$this->assertTrue( $admin->has_cap('add_post_meta',  $post) );
			$this->assertTrue( $admin->has_cap('delete_post_meta',  $post) );

			$this->assertFalse( $admin->has_cap('edit_post_meta', $post, '_protected') );
			$this->assertFalse( $admin->has_cap('add_post_meta', $post, '_protected') );
			$this->assertFalse( $admin->has_cap('delete_post_meta', $post, '_protected') );

			register_meta( 'post', '_protected', array( $this, '_meta_filter' ), array( $this, '_meta_yes_you_can' ) );
			$this->assertTrue( $admin->has_cap('edit_post_meta',  $post, '_protected') );
			$this->assertTrue( $admin->has_cap('add_post_meta',  $post, '_protected') );
			$this->assertTrue( $admin->has_cap('delete_post_meta',  $post, '_protected') );

			$this->assertTrue( $admin->has_cap('edit_post_meta', $post, 'not_protected') );
			$this->assertTrue( $admin->has_cap('add_post_meta', $post, 'not_protected') );
			$this->assertTrue( $admin->has_cap('delete_post_meta', $post, 'not_protected') );

			register_meta( 'post', 'not_protected', array( $this, '_meta_filter' ), array( $this, '_meta_no_you_cant' ) );
			$this->assertFalse( $admin->has_cap('edit_post_meta',  $post, 'not_protected') );
			$this->assertFalse( $admin->has_cap('add_post_meta',  $post, 'not_protected') );
			$this->assertFalse( $admin->has_cap('delete_post_meta',  $post, 'not_protected') );
		}
	}
/**
 * Registers the team member meta with their sanitization functions
 */
function register_team_member_meta()
{
    register_meta('post', get_team_member_title_meta_key(), 'sanitize_text_field', '__return_true');
    register_meta('post', get_team_member_twitter_meta_key(), 'sanitize_text_field', '__return_true');
}
Example #26
0
/**
 * Registers the theme layouts meta key ('Layout') for specific object types and provides a function to 
 * sanitize the metadata on update.
 *
 * @since 0.4.0
 * @return void
 */
function theme_layouts_register_meta()
{
    register_meta('post', theme_layouts_get_meta_key(), 'theme_layouts_sanitize_meta');
    register_meta('user', theme_layouts_get_meta_key(), 'theme_layouts_sanitize_meta');
}
 /**
  * Register term meta for a featured image
  * @return [type] [description]
  */
 function register_term_meta()
 {
     register_meta('term', 'impa_term_image', 'impress_agents_sanitize_term_image');
 }
/**
 * Register Custom Taxonomies
 *
 * @access public
 * @since 1.0
 * @since 2.0 Added capabilities for new roles, moved tags to mbdb_tags
 * @since 2.4 Added filter and item_list labels
 * @since 3.0 moved to separate function, added editor, illustrator, cover artist taxonomies
 *
 */
function mbdb_register_taxonomies()
{
    register_taxonomy('mbdb_genre', 'mbdb_book', apply_filters('mdbd_genre_taxonomy', array('rewrite' => array('slug' => 'mbdb_genres'), 'public' => true, 'show_admin_column' => true, 'update_count_callback' => '_update_post_term_count', 'capabilities' => array('manage_terms' => 'manage_categories', 'edit_terms' => 'manage_categories', 'delete_terms' => 'manage_categories', 'assign_terms' => 'manage_mbdb_books'), 'labels' => array('name' => __('Genres', 'mooberry-book-manager'), 'singular_name' => __('Genre', 'mooberry-book-manager'), 'search_items' => __('Search Genres', 'mooberry-book-manager'), 'all_items' => __('All Genres', 'mooberry-book-manager'), 'parent_item' => __('Parent Genre', 'mooberry-book-manager'), 'parent_item_colon' => __('Parent Genre:', 'mooberry-book-manager'), 'edit_item' => __('Edit Genre', 'mooberry-book-manager'), 'update_item' => __('Update Genre', 'mooberry-book-manager'), 'add_new_item' => __('Add New Genre', 'mooberry-book-manager'), 'new_item_name' => __('New Genre Name', 'mooberry-book-manager'), 'menu_name' => __('Genres', 'mooberry-book-manager'), 'popular_items' => __('Popular Genres', 'mooberry-book-manager'), 'separate_items_with_commas' => __('Separate genres with commas', 'mooberry-book-manager'), 'add_or_remove_items' => __('Add or remove genres', 'mooberry-book-manager'), 'choose_from_most_used' => __('Choose from the most used genres', 'mooberry-book-manager'), 'not_found' => __('No genres found', 'mooberry-book-manager'), 'items_list_navigation' => __('Genre navigation', 'mooberry-book-manager'), 'items_list' => __('Genre list', 'mooberry-book-manager')))));
    register_taxonomy('mbdb_tag', 'mbdb_book', apply_filters('mdbd_tag_taxonomy', array('rewrite' => array('slug' => 'mbdb_tags'), 'public' => true, 'show_admin_column' => true, 'update_count_callback' => '_update_post_term_count', 'capabilities' => array('manage_terms' => 'manage_categories', 'edit_terms' => 'manage_categories', 'delete_terms' => 'manage_categories', 'assign_terms' => 'manage_mbdb_books'), 'labels' => array('name' => __('Tags', 'mooberry-book-manager'), 'singular_name' => __('Tag', 'mooberry-book-manager'), 'search_items' => __('Search Tags', 'mooberry-book-manager'), 'all_items' => __('All Tags', 'mooberry-book-manager'), 'parent_item' => __('Parent Tag', 'mooberry-book-manager'), 'parent_item_colon' => __('Parent Tag:', 'mooberry-book-manager'), 'edit_item' => __('Edit Tag', 'mooberry-book-manager'), 'update_item' => __('Update Tag', 'mooberry-book-manager'), 'add_new_item' => __('Add New Tag', 'mooberry-book-manager'), 'new_item_name' => __('New Tag Name', 'mooberry-book-manager'), 'menu_name' => __('Tags', 'mooberry-book-manager'), 'popular_items' => __('Popular Tags', 'mooberry-book-manager'), 'separate_items_with_commas' => __('Separate tags with commas', 'mooberry-book-manager'), 'add_or_remove_items' => __('Add or remove tags', 'mooberry-book-manager'), 'choose_from_most_used' => __('Choose from the most used tags', 'mooberry-book-manager'), 'not_found' => __('No tags found', 'mooberry-book-manager'), 'items_list_navigation' => __('Tag navigation', 'mooberry-book-manager'), 'items_list' => __('Tag list', 'mooberry-book-manager')))));
    register_taxonomy('mbdb_series', 'mbdb_book', apply_filters('mbdb_series_taxonomy', array('rewrite' => array('slug' => 'mbdb_series'), 'public' => true, 'show_admin_column' => true, 'update_count_callback' => '_update_post_term_count', 'capabilities' => array('manage_terms' => 'manage_categories', 'edit_terms' => 'manage_categories', 'delete_terms' => 'manage_categories', 'assign_terms' => 'manage_mbdb_books'), 'labels' => array('name' => __('Series', 'mooberry-book-manager'), 'singular_name' => __('Series', 'mooberry-book-manager'), 'search_items' => __('Search Series', 'mooberry-book-manager'), 'all_items' => __('All Series', 'mooberry-book-manager'), 'parent_item' => __('Parent Series', 'mooberry-book-manager'), 'parent_item_colon' => __('Parent Series:', 'mooberry-book-manager'), 'edit_item' => __('Edit Series', 'mooberry-book-manager'), 'update_item' => __('Update Series', 'mooberry-book-manager'), 'add_new_item' => __('Add New Series', 'mooberry-book-manager'), 'new_item_name' => __('New Series Name', 'mooberry-book-manager'), 'menu_name' => __('Series', 'mooberry-book-manager'), 'popular_items' => __('Popular Series', 'mooberry-book-manager'), 'separate_items_with_commas' => __('Separate series with commas', 'mooberry-book-manager'), 'add_or_remove_items' => __('Add or remove series', 'mooberry-book-manager'), 'choose_from_most_used' => __('Choose from the most used series', 'mooberry-book-manager'), 'not_found' => __('No Series found', 'mooberry-book-manager'), 'items_list_navigation' => __('Series navigation', 'mooberry-book-manager'), 'items_list' => __('Series list', 'mooberry-book-manager')))));
    register_taxonomy('mbdb_editor', 'mbdb_book', apply_filters('mbdb_editor_taxonomy', array('rewrite' => array('slug' => 'mbdb_editors'), 'public' => true, 'show_admin_column' => true, 'update_count_callback' => '_update_post_term_count', 'capabilities' => array('manage_terms' => 'manage_categories', 'edit_terms' => 'manage_categories', 'delete_terms' => 'manage_categories', 'assign_terms' => 'manage_mbdb_books'), 'labels' => array('name' => __('Editors', 'mooberry-book-manager'), 'singular_name' => __('Editor', 'mooberry-book-manager'), 'search_items' => __('Search Editors', 'mooberry-book-manager'), 'all_items' => __('All Editors', 'mooberry-book-manager'), 'parent_item' => __('Parent Editor', 'mooberry-book-manager'), 'parent_item_colon' => __('Parent Editor:', 'mooberry-book-manager'), 'edit_item' => __('Edit Editor', 'mooberry-book-manager'), 'update_item' => __('Update Editor', 'mooberry-book-manager'), 'add_new_item' => __('Add New Editor', 'mooberry-book-manager'), 'new_item_name' => __('New Editor Name', 'mooberry-book-manager'), 'menu_name' => __('Editors', 'mooberry-book-manager'), 'popular_items' => __('Popular Editors', 'mooberry-book-manager'), 'separate_items_with_commas' => __('Separate Editors with commas', 'mooberry-book-manager'), 'add_or_remove_items' => __('Add or remove Editors', 'mooberry-book-manager'), 'choose_from_most_used' => __('Choose from the most used Editors', 'mooberry-book-manager'), 'not_found' => __('No Editors found', 'mooberry-book-manager'), 'items_list_navigation' => __('Edtior navigation', 'mooberry-book-manager'), 'items_list' => __('Editor list', 'mooberry-book-manager')))));
    register_taxonomy('mbdb_illustrator', 'mbdb_book', apply_filters('mbdb_illustrator_taxonomy', array('rewrite' => array('slug' => 'mbdb_illustrators'), 'public' => true, 'show_admin_column' => true, 'update_count_callback' => '_update_post_term_count', 'capabilities' => array('manage_terms' => 'manage_categories', 'edit_terms' => 'manage_categories', 'delete_terms' => 'manage_categories', 'assign_terms' => 'manage_mbdb_books'), 'labels' => array('name' => __('Illustrators', 'mooberry-book-manager'), 'singular_name' => __('Illustrator', 'mooberry-book-manager'), 'search_items' => __('Search Illustrators', 'mooberry-book-manager'), 'all_items' => __('All Illustrators', 'mooberry-book-manager'), 'parent_item' => __('Parent Illustrator', 'mooberry-book-manager'), 'parent_item_colon' => __('Parent Illustrator:', 'mooberry-book-manager'), 'edit_item' => __('Edit Illustrator', 'mooberry-book-manager'), 'update_item' => __('Update Illustrator', 'mooberry-book-manager'), 'add_new_item' => __('Add New Illustrator', 'mooberry-book-manager'), 'new_item_name' => __('New Illustrator Name', 'mooberry-book-manager'), 'menu_name' => __('Illustrators', 'mooberry-book-manager'), 'popular_items' => __('Popular Illustrators', 'mooberry-book-manager'), 'separate_items_with_commas' => __('Separate Illustrators with commas', 'mooberry-book-manager'), 'add_or_remove_items' => __('Add or remove Illustrators', 'mooberry-book-manager'), 'choose_from_most_used' => __('Choose from the most used Illustrators', 'mooberry-book-manager'), 'not_found' => __('No Illustrators found', 'mooberry-book-manager'), 'items_list_navigation' => __('Illustrator navigation', 'mooberry-book-manager'), 'items_list' => __('Illustrator list', 'mooberry-book-manager')))));
    register_taxonomy('mbdb_cover_artist', 'mbdb_book', apply_filters('mbdb_cover_artist_taxonomy', array('rewrite' => array('slug' => 'mbdb_cover_artists'), 'public' => true, 'show_admin_column' => true, 'update_count_callback' => '_update_post_term_count', 'capabilities' => array('manage_terms' => 'manage_categories', 'edit_terms' => 'manage_categories', 'delete_terms' => 'manage_categories', 'assign_terms' => 'manage_mbdb_books'), 'labels' => array('name' => __('Cover Artists', 'mooberry-book-manager'), 'singular_name' => __('Cover Artist', 'mooberry-book-manager'), 'search_items' => __('Search Cover Artists', 'mooberry-book-manager'), 'all_items' => __('All Cover Artists', 'mooberry-book-manager'), 'parent_item' => __('Parent Cover Artist', 'mooberry-book-manager'), 'parent_item_colon' => __('Parent Cover Artist:', 'mooberry-book-manager'), 'edit_item' => __('Edit Cover Artist', 'mooberry-book-manager'), 'update_item' => __('Update Cover Artist', 'mooberry-book-manager'), 'add_new_item' => __('Add New Cover Artist', 'mooberry-book-manager'), 'new_item_name' => __('New Cover Artist Name', 'mooberry-book-manager'), 'menu_name' => __('Cover Artists', 'mooberry-book-manager'), 'popular_items' => __('Popular Cover Artists', 'mooberry-book-manager'), 'separate_items_with_commas' => __('Separate Cover Artists with commas', 'mooberry-book-manager'), 'add_or_remove_items' => __('Add or remove Cover Artists', 'mooberry-book-manager'), 'choose_from_most_used' => __('Choose from the most used Cover Artists', 'mooberry-book-manager'), 'not_found' => __('No Cover Artists found', 'mooberry-book-manager'), 'items_list_navigation' => __('Cover Artist navigation', 'mooberry-book-manager'), 'items_list' => __('Cover Artist list', 'mooberry-book-manager')))));
    // ************ term meta *********************************/
    if (function_exists('get_term_meta')) {
        $taxonomies = get_object_taxonomies('mbdb_book', 'objects');
        foreach ($taxonomies as $name => $taxonomy) {
            $pretty_name = str_replace('mbdb_', '', $name);
            register_meta('term', $name . '_book_grid_descripion', 'mbdb_sanitize_book_grid_description');
            register_meta('term', $name . '_book_grid_description_bottom', 'mbdb_sanitize_book_grid_description');
            add_action($name . '_add_form_fields', 'mbdb_new_' . $pretty_name . '_grid_description_field');
            add_action('edit_' . $name, 'mbdb_save_' . $pretty_name . '_book_grid_description');
            add_action('create_' . $name, 'mbdb_save_' . $pretty_name . '_book_grid_description');
            add_action($name . '_edit_form_fields', 'mbdb_edit_' . $pretty_name . '_grid_description_field');
        }
    }
}
 /**
  * Add a field.
  *
  * @access public
  *
  * @param string                     $object_type Object type.
  * @param WP_Fields_API_Field|string $id          Fields API Field object, or ID.
  * @param string                     $object_name Object name (for post types and taxonomies).
  * @param array                      $args        Field arguments; passed to WP_Fields_API_Field
  *                                                constructor.
  */
 public function add_field($object_type, $id, $object_name = null, $args = array())
 {
     if (empty($id) && empty($args)) {
         return;
     }
     $control = array();
     if (is_a($id, 'WP_Fields_API_Field')) {
         $field = $id;
         $id = $field->id;
     } else {
         // Save for late init
         $field = $args;
         if (isset($field['control'])) {
             $control = $field['control'];
             // Remove from field args
             unset($field['control']);
         }
     }
     if (empty($object_name) && !empty($object_type)) {
         $object_name = '_' . $object_type;
         // Default to _object_type for internal handling
     }
     if (!isset(self::$fields[$object_type])) {
         self::$fields[$object_type] = array();
     }
     if (!isset(self::$fields[$object_type][$object_name])) {
         self::$fields[$object_type][$object_name] = array();
     }
     self::$fields[$object_type][$object_name][$id] = $field;
     // Control handling
     if (!empty($control)) {
         // Generate Control ID if not set
         if (empty($control['id'])) {
             $control['id'] = sanitize_key($id);
         }
         // Get Control ID
         $control_id = $control['id'];
         // Remove ID from control args
         unset($control['id']);
         // Add field
         $control['fields'] = $id;
         // Add control for field
         $this->add_control($object_type, $control_id, $object_name, $control);
     }
     // Meta types call register_meta() for their fields
     if (in_array($object_type, array('post', 'term', 'user', 'comment')) && (!empty($field['internal']) || !empty($field->internal))) {
         // Set callbacks
         $sanitize_callback = array($this, 'register_meta_sanitize_callback');
         $auth_callback = null;
         if (!empty($field['meta_auth_callback'])) {
             $auth_callback = $field['meta_auth_callback'];
         } elseif (!empty($field->meta_auth_callback)) {
             $auth_callback = $field->meta_auth_callback;
         }
         register_meta($object_type, $id, $sanitize_callback, $auth_callback);
     }
 }
/**
 * Registers the custom field series meta key 'Series' for for specific object types and provides a 
 * function to sanitize the metadata on update.
 *
 * @since 0.4.0
 * @access private
 * @return void
 */
function custom_field_series_register_meta()
{
    register_meta('post', custom_field_series_meta_key(), 'custom_field_series_sanitize_meta');
}