0

I am trying to get the value of the 'new-post-slug' (the bit that you can edit to customize your slug for a post, but bizarrely doesn't have a 'name' attribute as you'd expect a form field to have ... the update must be done in ajax in the background)

What I am stuck on is 2 things:

  • Why do posts not get their post_name (slug) updated on saving a draft? (not autosaving, I mean hitting the 'Save Draft' button)

  • If I was to try and do this manually (using the save_post hook), how can I get the value of the 'new-post-slug' (since this field is not available in the $_POST var). I guess I could try and do a pre-form-submit jQuery append-to-form type thing which gets this field .

When using the wp_handle_upload_prefilter to catch the filename before it gets uploaded, the post_name (the slug) is not set:

add_filter('wp_generate_attachment_metadata', 'check_images_file_to_slug', 10, 2);

public function check_images_file_to_slug($image_info)
{  
    // Get the parent post ID, if there is one
    if( isset($_GET['post_id']) ) {
        $post_id = $_GET['post_id'];
    } elseif( isset($_POST['post_id']) ) {
        $post_id = $_POST['post_id'];
    }

    // Only do this if we got the post ID--otherwise they're probably in
    //  the media section rather than uploading an image from a post.
    if(is_numeric($post_id)) {
        /* @var @post WP_Post */
        $post = get_post($post_id);

        // Here $post->post_name (the slug), is empty for post-new.php (Adding new post)
    }
}
0

When a new post is created (regardless of status) post_name which is the slug is saved to the WP_Post object.

You can fire off a wp_ajax_$youraction() in the backend to get the post object and return the slug.

0

I run into a similar issue. I had to remove remove_meta_box('slugdiv', ['post', 'page'], 'normal'); from my code. When you remove the slugdiv meta box the slug edit box for WP does stops working.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

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