WordPress Development Stack Exchange is a question and answer site for WordPress developers and administrators. Join them; it only takes a minute:

Sign up
Here's how it works:
  1. Anybody can ask a question
  2. Anybody can answer
  3. The best answers are voted up and rise to the top

I am using custom posts, and in these, I don't a need for the title.

This causes Wordpress to set the titles of my posts to "Auto Draft".

I'd like to change the title's value to something else, computed from other fields in my post.

How do I go about doing that using save_post or some other means?

share|improve this question
Please edit your question to include your register_post_type() call. – Chip Bennett Nov 21 '12 at 18:54
What are you trying to achieve exactly? You don't want a post title for your CPT at all or you want it to be set from a custom field value? – Rutwick Gangurde Nov 21 '12 at 19:01
I don't want it at all, but in the posts list I can't remove it as I won't be able to edit posts anymore. This means that I need a way to place a "fake" title of some kind instead. – Tsahi Levent-Levi Nov 21 '12 at 19:28
So, what you really want to do is to modify the manage posts screen, to output different columns for your custom post type? If so, that might be a more beneficial question to ask. :) – Chip Bennett Nov 21 '12 at 19:38
It is jsut a part. One asks this kind of "impact" questions because he seeks an answer to help him orginize many aspects of a project. Search ,templating e.t.c – e4rthdog Feb 14 at 10:36
up vote 6 down vote accepted

This simplest method would be to edit the data at the point it's inserted, rather than updating it afterwards, using wp_insert_post_data instead of save_post. This works on creating a new post or updating an existing post without change. It also avoids the danger of creating an infinite loop by triggering update_post within save_post.

add_filter( 'wp_insert_post_data' , 'modify_post_title' , '99', 1 ); // Grabs the inserted post data so you can modify it.

function modify_post_title( $data )
  if($data['post_type'] == 'rating' && isset($_POST['rating_date'])) { // If the actual field name of the rating date is different, you'll have to update this.
    $date = date('l, d.m.Y', strtotime($_POST['rating_date']));
    $title = 'TV ratings for ' . $date;
    $data['post_title'] =  $title ; //Updates the post title to your new title.
  return $data; // Returns the modified data.
share|improve this answer

I had the exact same need, so I wrote this function - which works. Modify it to your needs. Hope this helps.

// set daily rating title
function set_rating_title ($post_id) {
    if ( $post_id == null || empty($_POST) )

    if ( !isset( $_POST['post_type'] ) || $_POST['post_type']!='rating' )  

    if ( wp_is_post_revision( $post_id ) )
        $post_id = wp_is_post_revision( $post_id );

    global $post;  
    if ( empty( $post ) )
        $post = get_post($post_id);

    if ($_POST['rating_date']!='') {
        global $wpdb;
        $date = date('l, d.m.Y', strtotime($_POST['rating_date']));
        $title = 'TV ratings for ' . $date;
        $where = array( 'ID' => $post_id );
        $wpdb->update( $wpdb->posts, array( 'post_title' => $title ), $where );
add_action('save_post', 'set_rating_title', 12 );
share|improve this answer

Try the filter 'default_title':

add_filter( 'default_title', 'my_default_title', 10, 2 );

function my_default_title( $post_title, $post ){

  $custom_post_type = 'my_awesome_cpt';

  // do it only on your custom post type(s)
  if( $post->post_type !== $custom_post_type )
    return $post_title;

  // create your preferred title here
  $post_title = $custom_post_type . date( 'Y-m-d :: H:i:s', time() );

  return $post_title;
share|improve this answer
This solution does not allow to create a title "computed from other fields in my post" - as requested. It is fine, if you can generate an automatic title for all posts of that kind. But if you need to depend on some dynamic variable then this won't help. – Biranit Goren Nov 21 '12 at 21:45
@Biranit Goren What does "computed from other fields in my post" mean? Which field did you miss in the post object stored in $post? Please read the initial question and the comments below. An automatic generated post titel is not requested. Only a fake post titel ( a replacement for WordPress "Auto Draft" ) is needed. – Ralf912 Nov 22 '12 at 20:10

Your Answer


By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.