Help with front-end editing
- This topic has 2 replies, 2 voices, and was last updated 7 years, 4 months ago by
jcleaveland.
-
AuthorPosts
-
November 28, 2017 at 2:53 PM #7663
jcleaveland
ParticipantHi,
I am trying to update the post_title from the front-end by joining two metabox fields (first name and last name) together.
It works as long as I am editing just the metabox with those fields. The issue is that I have several different metaboxes displayed that each have their own set of fields. Think contact info, demographic info, emergency contact, type (taxonomy), status (taxonomy) etc.
When I update any of the other metaboxes, the title disappears and the slug is rewritten. If I update the post from the back-end, the title reappears and the slug is rewritten again.
Here is the code I am using to update the title:
function set_member_meta_title( $data , $postarr ) { if($data['post_type'] === 'obh_member_meta' && $data['post_date_gmt'] !== $data['post_modified_gmt'] ) { $first_name = $_POST['obh_member_meta_contact_first_name']; //get_post_meta($postarr['ID'],'obh_member_meta_contact_first_name',true); $last_name = $_POST['obh_member_meta_contact_last_name']; //get_post_meta($postarr['ID'], 'obh_member_meta_contact_last_name' , true); $title = $first_name . ' ' . $last_name; $post_slug = sanitize_title_with_dashes ($title,'','save'); $post_slugsan = sanitize_title($post_slug); $data['post_title'] = $title; $data['post_name'] = $post_slugsan; } return $data; } add_filter( 'wp_insert_post_data' , 'set_member_meta_title' , '10', 2 );
I think I need to do some sort of check to determine if I am updating either of the first or last name fields before making the update and execute only if I am editing those fields, but I am at a loss on how to do that.
Could you provide any inspiration on how I might accomplish that?
Thanks so much!
December 5, 2017 at 4:37 PM #7753Anh Tran
KeymasterHi,
I think hooking to
wp_insert_post_data
is too generic as it fires every time a post is added/updated.The extension already have 2 filters that you can use to change the post data when saving:
rwmb_frontend_update_post_data
for updating posts andrwmb_frontend_insert_post_data
for creating new posts. Previously it has only 1 params: the submitted post data. But I've just updated the extension, adding 2nd parameter: the shortcode params, so you can use to check whether you are on the right meta box.This is sample code:
add_filter( 'rwmb_frontend_insert_post_data', 'your_function', 10, 2 ); add_filter( 'rwmb_frontend_update_post_data', 'your_function', 10, 2 ); function your_function( $data, $config ) { if ( $config['id'] !== 'your_meta_box_id' ) { return $data; } // Your code to get post_title $data['post_title'] = ...; return $data; }
Please try it and let me know if you need anything. I can update the extension to make it works for you.
December 6, 2017 at 1:04 AM #7756jcleaveland
ParticipantThis is great!
Yes, insert_post_data was too generic. This is much better.
I ended up with a simple check on the content of the fields prior to executing the code, but this is more elegant and more flexible in the long run.
function set_member_title( $data ) { if($data['post_type'] === 'obh_member_meta' && $data['post_date_gmt'] !== data['post_modified_gmt'] ) { $first_name = $_POST['obh_member_meta_contact_first_name']; $last_name = $_POST['obh_member_meta_contact_last_name']; if (isset($first_name) || isset($last_name) ) { $title = $first_name . ' ' . $last_name; $post_slug = sanitize_title_with_dashes ($title,'','save'); $post_slugsan = sanitize_title($post_slug); $data['post_title'] = $title; $data['post_name'] = $post_slugsan; return $data; } } } add_filter( 'wp_insert_post_data' , 'set_member_title' , '99', 2 );
Thank you!
-
AuthorPosts
- The topic ‘Help with front-end editing’ is closed to new replies.