I often need to create post titles in WordPress based on fields I’ve generated using Advanced Custom Fields. Below is an example that assumes we have a Custom Post Type registered to “staff” and two Custom Fields with the name of “first_name” and “last_name”. Using the “update_value” hook provided by Advanced Custom Fields and “wp_update_post” I am able to update the Slug and Post Title using the values given in the respective fields.
// Create Title and Slug | |
function acf_title( $value, $post_id, $field ) { | |
if ( get_post_type( $post_id ) == 'staff' ) { | |
$new_title = get_field('first_name', $post_id) . ' ' . $value; | |
$new_slug = sanitize_title( $new_title ); | |
// update post | |
wp_update_post( array( | |
'ID' => $post_id, | |
'post_title' => $new_title, | |
'post_name' => $new_slug, | |
) ); | |
} | |
return $value; | |
} | |
add_filter( 'acf/update_value/name=last_name', 'acf_title', 10, 3 ); |
Disabling the title at a custom post type level will, unfortunately, remove the clickable permalink below the title that I often use. To combat that I create a very simple metabox with the permalink. Demonstrated below.
/** | |
* Adds a meta box | |
*/ | |
function simple_meta_box() { | |
add_meta_box( 'prfx_meta', ( 'View Post' ), 'simple_meta_box_callback', 'staff', 'side', 'high' ); | |
} | |
add_action( 'add_meta_boxes', 'simple_meta_box' ); | |
/** | |
* Outputs the content of the meta box | |
*/ | |
function simple_meta_box_callback( $post ) { | |
echo '<a href="'; | |
the_permalink(); | |
echo '" class="button button-small" target="_blank">View Profile</a>'; | |
} |