Take the 2-minute tour ×
WordPress Development Stack Exchange is a question and answer site for WordPress developers and administrators. It's 100% free, no registration required.

I'm using RW_Meta_Box plugin by Rilwis.

I'm using a CPT and added a custom meta-box and removed the title and editor.

But I still want to set the title for some obvious reasons.

I created the CPT and meta-box and everything worked perfectly including the all posts page using custom column hooks.

As soon as I sat to set post title to one of the fields in the meta-box, I failed to get the desired results.I tried to solutions I picked by searching through this Q&A site.

Initially I tried:

SOLUTION1:

add_action('submitpost_box', 'hidden_type_title');

function hidden_type_title() {
    global $current_user, $post, $post_type;
    global $prefix;
    $md = rwmb_meta($prefix . 'name', array('type' => 'text'), $post->ID);
    if ($post->post_type == 'MY_CPT_NAME') {
    ?>
    <input type="hidden" name="post_title" value="<?php echo esc_attr(htmlspecialchars($md)); ?>" id="title" />
    <?php
    } else {
    return;
    }
}

The above code works fine but it has a problem I am unable to detect. which is, I need to update the post twice to set the post title.

Therefore I went on to try the save_post hook like so:

SOLUTION2:

add_action('save_post', 'post_updated');

function post_updated($post_id) {
    global $current_user, $post;
    if ($post->post_type != 'MY_CPT_NAME') {
    return;
    }

    global $prefix;
    $md = rwmb_meta($prefix . 'name', array('type' => 'text'), $post_id);
    // verify post is not a revision & not an autosave
    if (!wp_is_post_revision($post_id) && !(defined('DOING_AUTOSAVE') && DOING_AUTOSAVE)) {
    // set the new post title
    $post->ID = $post_id;
    $post->post_title = $md;

    // update the post, removing the action to prevent an infinite loop
    remove_action('save_post', 'post_updated');
    wp_update_post($post);
    add_action('save_post', 'post_updated');
    return;
    }
}

Now, I'm in a worse situation, the post title is instantly set but my meta-box data is somehow not being saved.

What might be wrong with the first solution?

share|improve this question
    
On the first block of code : echo esc_attr(htmlspecialchars($md)); won't have a value in your hidden input until you save... hence needing to save twice to set the title. What is the name of the field you want to base the post title off of? –  helgatheviking Jul 16 '13 at 13:48
    
@helgatheviking No I think, $md has value after submtting the form. just checkecd. –  JeyKeu Jul 16 '13 at 14:29
    
yes, that's what you said in your question: "I need to update the post twice to set the post title." On a new post this hidden field isn't populated until the post is saved the first time, requiring you to save a second time to trigger the post title. –  helgatheviking Jul 16 '13 at 14:34
add comment

1 Answer

up vote 2 down vote accepted

Here's a solution that take's advantage of Rilwis' action hook... so you can profit from his nonce checking without needing to add your own.

add_action('rwmb_after_save_post', 'post_updated');

function post_updated($post_id) {

    // verify post is not a revision & not an autosave
    if (!wp_is_post_revision($post_id) && !(defined('DOING_AUTOSAVE') && DOING_AUTOSAVE)) {

    global $prefix;
    $prefix . 'name';

    // check that the custom field is being POSTED 

    if( isset( $_POST[$prefix . 'name'] ) ){    
        $my_post = array();
        $my_post['ID'] = $post_id;
        $my_post['post_title'] = sanitize_title( $_POST[$prefix . 'name'] );

        // Update the post into the database
        wp_update_post( $my_post );   

        }

    }
}

To limit this function to only run for a specific metabox, you could use this add_action instead:

add_action("rwmb_{$meta_box['id']}_after_save_post", 'post_updated');

Without seeing your metabox definitions, I don't know what to change the ID to, so you will have to do that.

NB: Untested, but I think it is close. Please see wp_update_post() in the codex for how that function works.

share|improve this answer
    
Thanks! That Solved my problem. –  JeyKeu Jul 16 '13 at 14:39
add comment

Your Answer

 
discard

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.