Skip to content

Instantly share code, notes, and snippets.

@philhoyt
Last active November 11, 2023 00:51
Show Gist options
  • Save philhoyt/11ab22518aa26fedeb89867a228ea53f to your computer and use it in GitHub Desktop.
Save philhoyt/11ab22518aa26fedeb89867a228ea53f to your computer and use it in GitHub Desktop.
Using Advanced Custom Fields to create your Post Title
<?php
/** 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 );
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 );
@easaw
Copy link

easaw commented Sep 2, 2020

A bit late to the party, but I found that the simple answer is to change this

$new_title = get_field('first_name', $post_id) . ' ' . $value;

to this:

$new_title = get_field('first_name', $post_id);

This way you only get the new, updated field as the post title and post slug.

@minemindmedia
Copy link

@Animalejourbano did you ever figure out how to use TWO ACF fields to generate your page title?

@pinin
Copy link

pinin commented Apr 5, 2022

it works for me

// Get title from 'contacts'CPT acf field 'contact_name'
if (get_post_type($post_id) == 'post_zamestnanci') {
	
    $employee_name = get_field("za_jmeno_zamestnance");
	
    if ($employee_name) {
        $prefix = $employee_name['za_title_before'];
        $name_first = $employee_name['za_name_first'];
        $name_last = $employee_name['za_name_last'];
        $postfix = $employee_name['za_title_after'];
	}
	
    $new_title = get_field( $employee_name, $post_id ) . $prefix . ' ' . $name_first . ' ' . $name_last . '' . $postfix;
    $new_slug = sanitize_title( $new_title );
	
    wp_update_post(array(
        'ID' 			=> $post_id,
        'post_title' 	=> $new_title,
        'post_name' 	=> $new_slug,
	));
}

return $value;

@mediaryte
Copy link

To get "Last Name, First Name" here's the code:

function contact_title( $value, $post_id, $field ) {
	if ( get_post_type( $post_id ) === 'contact' ) {

		$new_title = $value . ', ' . get_field( 'first_name', $post_id );
		$new_slug  = sanitize_title( $new_title );

		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', 'contact_title', 10, 3 );

@adamehunt
Copy link

adamehunt commented Jul 25, 2023

I adapted this to my use case, and the title only updated if I updated the post twice.

I modified the code (changing $new_title = $value) and it updates the title after updating the post once , though I'm not sure why it works. If someone more experienced than me could explain why it works, or a better way to do it I would appreciate it!

`function review_title( $value, $post_id, $field ) {
if ( get_post_type( $post_id ) === 'review' ) {

	$new_title = $value;
	$new_slug  = sanitize_title( $new_title );

	wp_update_post(
		array(
			'ID'         => $post_id,
			'post_title' => $new_title,
			'post_name'  => $new_slug,
		)
	);
}
return $value;

}
add_filter( 'acf/update_value/name=reviewer_name', 'review_title', 10, 3 );`

@domingoapineiro
Copy link

domingoapineiro commented Nov 11, 2023

This works for me:

function acf_title_solicitudes( $value, $post_id, $field ) {
	
    $new_title = get_field('servicio', $post_id). ' ' . $value;
	$slug = sanitize_title( $new_title );
  
	$postdata = array(
	     'ID'          => $post_id,
         'post_title'  => $new_title,
	     'post_type'   => 'solicitudes',
	     'post_name'   => $slug
  	);
  
	wp_update_post( $postdata );
	
	return $value;
	
}
add_filter('acf/update_value/name=servicio', 'acf_title_solicitudes', 10, 3);

Source: https://www.jennybeaumont.com/auto-create-post-title-acf-data/

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment