Make WordPress Core

Updates from Scott Kingsley Clark Toggle Comment Threads | Keyboard Shortcuts

  • Scott Kingsley Clark 10:12 pm on May 27, 2015 Permalink |
    Tags: , , ,   

    Metadata API project reborn: The new Fields API project 

    Many of you will remember that a couple of years ago, @ericlewis and a group of us set out to start a project to make sense of all of the different APIs that arose from third party plugins and themes to build custom field solutions on top of WordPress. That project was nicknamed “Metamorphosis” and subsequently went by the “Metadata UI/API” project. As plugin authors dealing with and using custom fields and content types, we had been tackling the issues of developing for multiple object types in WordPress for years prior to getting together.

    Now, @helen and I are pleased to (re)introduce to you what we’re hoping to be the fruits of all of this labor: Meet the new Fields API project.

    function fields_api_example_post_field_register( $wp_fields ) {
       // 1. Define a new section (meta box) for fields to appear in
       $wp_fields->add_section( 'post_type', 'my_cpt', 'my_meta_box',
             // Visible title of section
             'title'       => __( 'My Meta Box', 'mytheme' ),
             // Determines what order this appears in
             'priority'    => 'high',
             // Determines what order this appears in
             'context'     => 'side',
             // Capability needed to tweak
             'capability'  => 'my_custom_capability'
       // 2. Register new fields
       $wp_fields->add_field( 'post_type', 'my_cpt', 'my_custom_field',
             // Default field/value to save
             'default'    => 'All about that post',
             // Optional. Special permissions for accessing this field.
             'capability' => 'my_custom_capability',
             // Optional. Add an associated control (otherwise it won't show up in the UI)
             'control' => array(
                // Don't set 'id' and it will automatically be generated for you as
                'id' => 'mysite_my_custom_field',
                // Admin-visible name of the control
                'label'   => __( 'My Custom Field', 'mytheme' ),
                // ID of the section this control should render in (can be one of yours, or a WordPress default section)
                'section' => 'my_meta_box',
                // Control type
                'type'    => 'text'
    add_action( 'fields_register', 'fields_api_example_post_field_register' );

    (Please note: The code above may not be the same as the final implementation, it will especially change over the next few weeks)

    First of all, we split off the UI side of the project to focus solely on the API. This way, we’re not held up by anything as we move towards implementation inside of core. We can tackle each UI separately and that helps us keep the project nimble and on track.

    The goals of this new API proposal will be to be implemented across WordPress objects as an API to register fields and sections for. We aim to cover these objects (not necessarily in this order):

    • Customizer (retrofitting it beneath the existing Customizer API)
    • User profile screen
    • Post editor
    • Settings screens (retrofitting it beneath the existing Settings API)
    • And other areas in the future (Comment editor, Network Settings screens [see #15691], Media modals, etc)

    This API offers a great deal of standardization across all of WordPress and code reusability. It’s paramount for third-party developers, who will be able to utilize these structures in their own plugins and themes, build apps and give access to other developers so they can contextually see what a site really contains. I see the biggest use-case being able to expose the entirety of WordPress to the REST API and giving apps like the WordPress iOS app access to meta boxes and custom fields to display real editor screens with field inputs based on the control types natively.

    Areas we need help currently:

    • Examples and use cases for Customizer, User profile screen, Post editor, and Settings screens (submit issues in GitHub with your ideas, coordinate with us to refine them if you want)
    • Unit tests for core
    • Testing Customizer implementation, you’ll find the core files to replace under the /implementations/ folder in the repo
    • Brainstorming implementation classes for other object types to implement in the UI, starting with User profile screen

    If you’re interested in joining our merry crew which includes @helen and a few of us, hop into Slack #core-fields and join our weekly meetings every Monday (Monday 20:00 UTC 2015). You can check out the Fields API and submit PRs on GitHub, or ping us in #core-fields throughout the week with questions or concerns.

  • Scott Kingsley Clark 5:20 pm on August 22, 2014 Permalink
    Tags: ,   

    WP Metadata UI / API project update and new meeting time/place 

    It’s been a few weeks since we’ve posted an update, @mikeschinkel has been working hard on some new commits to give us some shortcuts for option arrays and things have stabilized there finally. We’re now focused on documenting field type development so we can get some contributors in there fleshing out the remaining field types.

    We are also moving our “Office Hours” time and place, to Mondays @ 1800 UTC , but instead of IRC where people can’t sync up and collaborate, we’re moving it to our public Gitter room. Some other WP projects are using it and we’ve found it incredibly helpful to keep up with GitHub activity along with chat that can happen at all times of the day and it sticks around for you to read anytime you want to.

    Our Gitter chat can be found here: https://gitter.im/wordpress-metadata/metadata-ui-api

    Anyone can see the chat messages, and if you want to participate it’s just a GitHub login away. They have iOS / Mac apps too, so that’s helpful to some people as well.

    If you’re interested in contributing, or if you want to check out what we’ve got and need some insight, just ping us — anytime — in Gitter :)

  • Scott Kingsley Clark 6:06 pm on June 22, 2014 Permalink
    Tags: ,   

    WP Metadata API / UI office hours this Friday 

    We will continue our weekly meetings this Friday. As no other suggestions have been made, it will remain at 18:00 UTC on Fridays in #wordpress-core-plugins on Freenode IRC.

    We may be transitioning from meeting into office hours as we haven’t had as many contributors joining us at the meetings as we had hoped. We will continue developing some awesomeness over at https://github.com/wordpress-metadata/metadata-ui-api

    Feel free to hop into the issues and take ownership of new field types or documentation. We’re also looking for help with styling of the form fields and JS in relation to support for repeatable fields.

    • Slobodan Manic 7:47 pm on June 22, 2014 Permalink | Log in to Reply

      Fridays work for me. I can continue working on field types, submitted a PR with four new input fields (email, range, number, color).

    • nofearinc 7:56 pm on June 22, 2014 Permalink | Log in to Reply

      9pm EEST on Fridays is not really the best timing for some of us either, which is 8pm for CEST (Central Europe) folks too (sorry for not being available, but that timing is a bit off here).

    • Ryan McCue 1:21 am on June 23, 2014 Permalink | Log in to Reply

      We may be transitioning from meeting into office hours as we haven’t had as many contributors joining us at the meetings as we had hoped.

      I think that’s just a common thing with feature-as-a-plugin teams; don’t be disheartened! :)

    • deltafactory 2:06 pm on June 23, 2014 Permalink | Log in to Reply

      Was last week’s cancelled? I was there and tried to get the conversation started but no one answered.

      • Scott Kingsley Clark 2:11 pm on June 23, 2014 Permalink | Log in to Reply

        Saw you and someone else were there, unfortunately Mike couldn’t make it and I was stuck in traffic trying to get home. We are all currently planning to be there this Friday, I won’t be cutting it so close with my plans on Friday either :)

    • Scott Kingsley Clark 8:32 pm on June 27, 2014 Permalink | Log in to Reply

      It turned out that Mike Schinkel couldn’t make it this week and I once again was stuck in traffic trying to get back from a WP lunch meetup.

      I think we’re going to try and push the ‘office hours’ a little earlier in the day so we can get some of our european contributors more involved.

      But going forward, I think in general, Fridays in #wordpress-core-plugins, I’ll be in there, and if you want to chat, we can chat, not sure if an hour long meeting slot is best while we’re in the current stage, until we have more movement and planning to be done as a group. Right now we’re just executing plans as we’ve laid them out.

  • Scott Kingsley Clark 4:00 pm on June 5, 2014 Permalink
    Tags: ,   

    WP Metadata API / UI team meeting hours vote 

    It was brought up that our current meeting time at 18:00 UTC on Fridays in #wordpress-core-plugins on Freenode IRC is not necessarily the best for everyone.

    What day would be better? Around what time would be better?

    This week’s meeting will continue as planned at the existing time on Friday, but next Friday’s meeting will be postponed due to a scheduling conflict with @mikeschinkel and I.

    • Slobodan Manic 6:25 pm on June 6, 2014 Permalink | Log in to Reply

      Hi. No one around for the meeting this week?

      • Scott Kingsley Clark 6:35 pm on June 6, 2014 Permalink | Log in to Reply

        We’re usually just hanging in #wordpress-core-plugins during that time frame, lately we’ve just been working through issues and code together. Not a whole lot of discussion during this period beyond “I’m working on this” :)

  • Scott Kingsley Clark 12:46 am on May 24, 2014 Permalink
    Tags: ,   

    We’re ready for more contributors to join us on the WP Metadata UI / API project 

    Where we need help most

    • Field Types – We need help building new field types, we currently have a few basic fields to start off with including the Text, Textarea, URL, Date, and Hidden field types.
    • Actions / Filters – We are now seeking to add in the hooks necessary to extend things further, feel free to request hooks anywhere you see a need for them.
    • Repeatable Fields – We are architecting a solution for repeatable fields, in which you can take a single field and make it have repeatable inputs that let someone add multiple values. These values would be stored in multiple meta values for the same meta key for the specific object ID.
    • Unit Testing – If your UT fu is strong, then strong would the use of your fu be on our team!

    Have any other ideas you’d like to help out with? Hop in, the world is your oyster and we’re eager to help you get those pearls!

    Join us in #wordpress-core-plugins on Freenode IRC and seek out @sc0ttkclark or @mikeschinkel if you need anything to help you get started, or open up an issue on our GitHub with your questions/feedback.

    We’re also still meeting 18:00 UTC on Fridays in #wordpress-core-plugins on Freenode IRC, feel free to search IRC logs for <#metadata> for a history of our previous conversations.

    So… ready to start? Head over to the WordPress Metadata UI / API GitHub now, see you there! Happy coding!

  • Scott Kingsley Clark 7:33 pm on May 13, 2014 Permalink
    Tags: ,   

    Metadata UI / API status update 

    We’ve been hard at work the past many weeks on getting something ready for contributors to start adding their PR’s against. @mikeschinkel took the helm for the initial base, after many discussions came up with a brilliant first code PR to the project. In our Friday meeting, we presented the PR and merged it into the official master for the project.

    You can start browsing through it now over at: https://github.com/wordpress-metadata/metadata-ui-api

    Some notable items from this initial first draft:

    • Global functions to access class/method based architecture (register_*)
    • register_post_form( ‘meta_box_name’, ‘post_type’, $args ) — Add new forms to a post type (like meta boxes)
    • register_post_field( ‘meta_key’, ‘post_type’, $args ) — Add new fields to a post type
    • Initial support to expand the API for use with Comment types, Option Groups, and Users
    • Support for custom object types that aren’t WP object types, like for plugins that have their own custom tables
    • Very efficient registration limits ‘fixups’ until fields are called, so registering hundreds of fields won’t detrimentally affect timing (confirmed by initial benchmarking)
    • Storage handling broken up into meta, options, taxonomy terms, can be extended by plugins to add additional storage options (like in Pods, we have custom tables/columns available for custom fields)
    • WP_Html_Element class methods handle html element building and auto-sanitization for attributes

    Our next steps are to continue testing the API and start having contributors join in (read: yes, YOU!). We’d like to start getting PR’s that add new field types and start working on unit testing next.

    Also, a call-out to our UI / JS team, we’re ready for you now :)

    • Scott Taylor 7:44 pm on May 13, 2014 Permalink | Log in to Reply

      Is there an example of this implemented somewhere?

      • Scott Kingsley Clark 7:45 pm on May 13, 2014 Permalink | Log in to Reply

        There’s a quick example in the README.md on GitHub, we’re working on getting together a full example we’ll be using for the unit testing as well.

    • Jon Brown 7:51 pm on May 13, 2014 Permalink | Log in to Reply

      Is this targeting 4.0 or is this still “future release”? (assuming the later, but always hoping)

      Aside, from that, looks awesome and looking forward to starting to bang around on it.

      I notice that only date, text, textarea & url fields are currently defined. I assume more are coming, is there roadmap? (I recall hearing of a roadmap, just not finding it anywhere).

      • Scott Kingsley Clark 8:01 pm on May 13, 2014 Permalink | Log in to Reply

        I’d love for it to mature enough to make 4.1, that’s my personal goal.

        More are coming, we just needed a couple to work with and test, starting small and adding more as we go. Contributors are welcome to suggest and add pull requests with others.

        I’ll be sure we update our readme with the current roadmap for upcoming things.

    • Jose Castaneda 9:08 pm on May 13, 2014 Permalink | Log in to Reply

      I really like the progress! Can’t wait to see the end result of it all. :)

    • Chris Van Patten 9:43 pm on May 13, 2014 Permalink | Log in to Reply

      This looks awesome. I have questions/concerns, but I’m going to try to play with it before asking them. Things might become clearer after I’ve had a chance to test it out!

      • Scott Kingsley Clark 2:34 am on May 14, 2014 Permalink | Log in to Reply

        Feel free to hit us up in #wordpress-core-plugins, I’m usually in there every day, but we can chat any time you’d like if you want to ping me for a specific time. We are definitely open to ideas to improve things.

    • sirjonathan 11:24 pm on May 13, 2014 Permalink | Log in to Reply

      Pardon my ignorance.. How would this effort compare / contrast with an effort like Elliot Condon’s “Advanced Custom Fields”? (I use it heavily and have beta tested the 5.0 release, which I’m highly impressed with).

      • Scott Kingsley Clark 2:30 am on May 14, 2014 Permalink | Log in to Reply

        ACF is one of a large and always growing list of plugins that lets you create custom fields for WordPress. It adds an Admin UI, like many (but not all) to help you define and manage those custom fields on your site.

        Plugins like these aren’t replaced by what we’re doing here, this is merely an API and standardized Form UI for what they all end up doing. This project scope does not include adding a management screen to manage the fields and forms (meta boxes).

        We hope that the result of this being implemented in core would be for these plugins to utilize this API, extending it to suit their needs, while giving a standard structure to post types that other plugins can integrate better with.

      • Mike Manger 9:37 am on May 14, 2014 Permalink | Log in to Reply

        I am looking forward to not having to exporting/importing plugin settings after each deploy.. ACF (and others) are great, but relying on functions like get_field( ‘my_field’ ) has always felt strange to me because you can’t guarantee ‘my_field’ will always exist in each setup.

        • Scott Kingsley Clark 4:40 pm on May 15, 2014 Permalink | Log in to Reply

          Also, global functions like get_field and others with no standard prefix from the plugin creates problems of their own for potential core inclusion of similar functions too.

    • Florian Girardey 7:23 am on May 14, 2014 Permalink | Log in to Reply

      Just waw !
      “Initial support to expand the API for use with Comment types, Option Groups, and Users”
      That’s fu**ing awesome.
      Does it means that the default WordPress options will be rework with this API ?
      I see there a pretty good way to make WordPress more secure even in third-part themes and plugins.

    • Scott Kingsley Clark 7:54 am on May 14, 2014 Permalink | Log in to Reply

      @fgirardey Our goal is to implement this as the standard API across WordPress for fields and option groups. I think it’s a lofty goal, but if we can get it accepted for post meta, we’re halfway there to get it in for the rest by adding a few more interfaces.

    • Roger Coathup 10:36 am on May 16, 2014 Permalink | Log in to Reply

      Are you planning to allow the forms to be rendered front end as well as in wp-admin (Something that Webdev’s Custom MetaBox API can now support)?

      • Scott Kingsley Clark 4:22 pm on May 16, 2014 Permalink | Log in to Reply

        Yes, that’s already possible now in the code, there’s no default form UI output handler yet, it’s all per implementation (currently just for post editor)

    • Weston Ruter 8:29 pm on May 21, 2014 Permalink | Log in to Reply

      Chiming in here for the first time. Regarding post/postmeta, I wanted to mention a prototype plugin—Customize Posts—I’ve been working on which adds support for editing a post’s data fields and post meta within the Customizer, allowing you to preview changes before saving.

      For example, currently when hitting Preview Changes when editing a post, you currently cannot preview a change to a page template, which only goes into effect when saving a post. Likewise, when you change the featured image, it updates the postmeta via Ajax immediately upon selecting the image, so you cannot preview that change either. All such postmeta changes should be fully previewable so you can see what will happen if you make a change. This is what bringing post/postmeta management to the Customizer will make possible.

      I see some nice overlap with Metadata project here, as the Customizer currently only has builtin support for registering settings for options and theme mods. It would be great if additional areas of WordPress could be easily registered for management in the Customizer.

  • Scott Kingsley Clark 4:24 am on April 11, 2014 Permalink
    Tags: ,   

    Metadata API/UI Meeting 04/11 

    As discussed in the previous meetings, we’re pushing the time back one hour from 19:00 UTC to the new time at 18:00 UTC on Fridays. We’ll be in #wordpress-core-plugins tomorrow, April 11th, 2014 as usual.

    We will be talking about the progress on form and field registration and move into some new modeling oriented based on objects (post types) instead of forms as previously discussed.

    See you all there!

  • Scott Kingsley Clark 4:25 pm on March 14, 2014 Permalink
    Tags: ,   

    Metadata API/UI Meeting Today 

    We’re having a low-key meeting today, as people are out enjoying WordCamp Atlanta and others this weekend. Don’t forget about the time change, it’s still at 19:00 UTC which is 2pm CDT now with day light savings time. We’ll be in #wordpress-core-plugins as usual.

    We’ll be discussing the overall API plan and ironing out some ideas that should help us be ready to discuss pros/cons of some new concerns with the structure and usage of classifiers for performance.

  • Scott Kingsley Clark 8:43 pm on February 28, 2014 Permalink
    Tags: ,   

    Metadata project meeting notes 

    Our meeting today was a great reboot for us, we had a small handful of people attend, with a few additional folks listening in.


    Going forward, we will now meet every Friday at 19:00 UTC, in #wordpress-core-plugins. We will talk about status of various tasks and make any big decisions necessary during these meetings.


    We have split our contributors into teams to help delegate responsibilities in a more formal fashion. As a result, we have two primary teams and a “Lead” that will be responsible for vetting proposals and providing direction. We’re still figuring out the best method of communication between members of each team, but the end solution will be public and available for anyone to join and contribute to the discussions throughout the week between our official Friday meetings.

    Please please please please, if you are interested in contributing, get in touch with me or any of the team leads. We are actively looking for help, so don’t be shy and jump on in.


    The registration, initialization, input sanitization, validation, and saving processes.


    The markup and styling (CSS/SASS) of the meta boxes and fields that are registered by the API.


    The JS needed for various field types and potentially what we’ll need for repeatable fields functionality.

    Tom, Justin, Micah, and Devin will be reviewing Backbone implementations they are familiar with to discern any areas we may want to implement it’s usage for potentially covering Repeatable fields.

    API team GoToMeeting

    Mike Schinkel will be running a GoToMeeting to go over his ideas for API direction this upcoming Thursday, March 6th, 2014 19:00 UTC, feel free to contact him or watch the recording later. We’ll post a link in the comments here next week and include it in next week’s meeting notes.

    New GitHub repository

    We have also moved our GitHub repo to a new location and setup teams to the corresponding members listed above. It’s now located in the WordPress Metadata org on GitHub

    • adamsilverstein 9:34 pm on February 28, 2014 Permalink | Log in to Reply

      Glad to see this effort revived. I couldn’t make the meeting today, although I would still like to contribute – probably to the JS team. Thanks for re-invigorating the effort!

    • Matt Banks 3:49 pm on March 10, 2014 Permalink | Log in to Reply

      Hey Scott – I’d love to get involved and help out with this! I’d like to help out on the UI team, and possibly JS team, depending on time. I’ll hop onto IRC on Friday for the meeting, or I can ping you on Twitter/elsewhere.

    • Scott Kingsley Clark 4:31 pm on March 10, 2014 Permalink | Log in to Reply

      @mjbanks Sure, sounds good to me! If you have time, hit me up in #wordpress-core-plugins any time this week.

    • Tom J Nowell 12:39 pm on March 13, 2014 Permalink | Log in to Reply

      I’m unsure why focus is being made on the User Interface when the foundations of the data layer have yet to be finalised. It’s like one team designs a dress while the other tries to invent cotton.

      Are there any UML diagrams or high level structures demonstrating the intended low level APIs? Nonfunctional psuedocode demonstrating how a user might be expected to interface with the intended API?

      • Scott Kingsley Clark 12:50 pm on March 13, 2014 Permalink | Log in to Reply

        The primary focus is not currently UI. We were organizing the UI team and making sure that we had a good idea from the UI side of any specific needs that could be considered during the API phase.

        Check out our GitHub for the latest info, we’re still having discussions to nail everything down as there’s a lot to be done.

    • toscho 1:54 am on March 14, 2014 Permalink | Log in to Reply

      Is there an explanation somewhere about the metadata part? From my point of view, there are no meta data, just data. Is this about the storage, the models or the view parts? The GitHub repo seems to be about UI only, which would be OK, but then the group should use the name Forms, right?

      • Scott Kingsley Clark 4:31 pm on March 14, 2014 Permalink | Log in to Reply

        The current project we’re working on and talking about is the new API / UI for meta fields. Right now, that’s focused on post meta, which will create meta box groups of fields and handle the saving processing as well.

  • Scott Kingsley Clark 9:50 pm on February 25, 2014 Permalink
    Tags: ,   

    Metadata project update 

    Greetings all! I’m Scott, I’ve been involved as the secondary lead on the project, with primary co-lead Eric Andrew Lewis (@ericlewis). As of today, Eric and I have switched roles. Eric’s time has had a few schedule conflicts pop up, but he’ll still be participating.

    Next Meeting

    We haven’t posted any updates here since January, but I aim to get us back track, starting with a meeting this Friday, February 28th, 2014 19:00 UTC to reboot contributor involvement.

    If you’re interested in joining us and contributing help, please join us, we’ll help assign people tasks and areas to participate.

    Donating dev time to core

    My employer, WebDevStudios, has graciously donated a block of time each week that will be devoted to me working on this project. I’m excited to be more involved and active on a core project. I’ll also be following trac tickets for the Options/Meta component on Trac to help out where I can there. I encourage others to also step up if this project is one your company or team has a vested interest in.

    More info

    If you’d like more information about the Metadata project currently in progress, check out our previous blog posts.

    Also check out the cool dashboard for the Options/Meta API component!

compose new post
next post/next comment
previous post/previous comment
show/hide comments
go to top
go to login
show/hide help
shift + esc
Skip to toolbar