[wp-trac] [WordPress Trac] #18713: No hooks available to "calculate" a post_title when only custom metaboxes in use

WordPress Trac wp-trac at lists.automattic.com
Tue Sep 20 04:00:43 UTC 2011


#18713: No hooks available to "calculate" a post_title when only custom metaboxes
in use
--------------------------+------------------------------------------------
 Reporter:  mikeschinkel  |      Owner:
     Type:  enhancement   |     Status:  new
 Priority:  normal        |  Milestone:  Awaiting Review
Component:  Post Types    |    Version:  3.2.1
 Severity:  normal        |   Keywords:  has-patch dev-feedback 2nd-opinion
--------------------------+------------------------------------------------
 When building fully custom post data entry screens for custom post types
 where the default `post_title`, `post_content` and `post_excerpt` fields
 are ''not'' displayed in their standard data entry format the
 `wp_insert_post()` function bails without any hooks available to correct
 the problem.

 The code that bails in on line # ~2430 in `/wp-includes/post.php` within
 `wp_insert_post()` when `$post_title` and `$post_content` and
 `$post_excerpt`  are not set and `$post_type` is not `'attachment'`:

 {{{
 if ( ('' == $post_content) && ('' == $post_title) && ('' == $post_excerpt)
 && ('attachment' != $post_type) ) {
   if ( $wp_error )
     return new WP_Error('empty_content', __('Content, title, and excerpt
 are empty.'));
   else
     return 0;
 }
 }}}

 An example where this is an issue is when creating a ''"Person"'' custom
 post type where there are meta fields for `'first_name'`,
 `'middle_initial'` and `'last_name'` and we want to calculate the
 `post_title` field based ON (something) like the following code:

 {{{
 extract( $_POST );
 if ( empty( $middle_initial ) )
   $_POST['post_title'] = "{$first_name} {$last_name}";
 else
   $_POST['post_title'] = "{$first_name} {$middle_initial} {$last_name}";
 }}}

 One solution would be to add a `'wp_translate_postdata'` hook on the
 return statement of the `__wp_translate_postdata()` function found in
 `/wp-admin/includes/post.php`:

 {{{
 return apply_filters( 'wp_translate_postdata', $post_data, $udpate );
 }}}

 This filter would allow someone building a custom post type to update
 `$post_data` with values for `$post_content`, `$post_title` and
 `$post_excerpt`, or really any other field's value, for that matter.

 Such a hook would also allow for critical error handling for unit,
 acceptance and regression tests. A user could write code in this hook for
 use with `WP_DEBUG` to ensure that data is always POSTed in the correct
 format. For example it would be helpful to test for when Javascript is
 used to create fields with complex values that need to be in the correct
 format to be properly saved to the database.

 I have attached a patch that can add the above pondered
 `'wp_translate_postdata'` hook to core, and as it is very simple hopefully
 it could make it in without much (any?) testing. However, suggestions for
 alternate solutions that address these two needs are welcome with the hope
 that something will make it into WordPress core to address these issues in
 the near future. Thanks in advance.

-- 
Ticket URL: <http://core.trac.wordpress.org/ticket/18713>
WordPress Trac <http://core.trac.wordpress.org/>
WordPress blogging software


More information about the wp-trac mailing list