Hi John,
Thank you for pointing me to the right direction but i actually got it working with the solution below. When i edit the custom field value and just click save, the excerpt gets updated as well.
Would you still recommend that i use the acf/save_post method?
function update_custom_post_excerpt_with_acf_field( $post_id ) {
// Ensure ACF is loaded
if (function_exists('get_field')) {
// Check if this is a post of your custom post type and not an autosave.
if ( get_post_type( $post_id ) === 'watercraft' && ! wp_is_post_autosave( $post_id ) && ! wp_is_post_revision( $post_id ) ) {
// Get the value of the custom field using ACF's get_field function.
$custom_field_value = get_field( 'watercraft_stock_number', $post_id );
// Check if the custom field value is not empty.
if ( ! empty( $custom_field_value ) ) {
// Prepare an array to update the post excerpt.
$post_data = array(
'ID' => $post_id,
'post_excerpt' => $custom_field_value,
);
// Update the post excerpt without triggering an infinite loop.
remove_action( 'save_post', 'update_custom_post_excerpt_with_acf_field' );
wp_update_post( $post_data );
add_action( 'save_post', 'update_custom_post_excerpt_with_acf_field' );
}
}
}
}
// Hook into the save_post action.
add_action( 'save_post', 'update_custom_post_excerpt_with_acf_field' );
Also i believe there is very close answer to what i need: on stack exchange
The following code auto-populates the post_excerpt whenever a post is created or saved, if it had no previous excerpt.
Note that the excerpt creation can be greatly improved, as it doesn’t differentiates Urls nor short words.
// Define the custom excerpt length
$wpse_40574_custom_excerpt_length = 15;
add_filter( 'wp_insert_post_data', 'wpse_40574_populate_excerpt', 99, 2 );
/**
* Checks if the the post has excerpt or not
* Code reference: https://wordpress.stackexchange.com/a/52897/12615
*/
//
function wpse_40574_populate_excerpt( $data, $postarr )
{
global $wpse_40574_custom_excerpt_length;
// check if it's a valid call
if ( !in_array( $data['post_status'], array( 'draft', 'pending', 'auto-draft' ) ) && 'post' == $data['post_type'] )
{
// if the except is empty, call the excerpt creation function
if ( strlen($data['post_excerpt']) == 0 )
$data['post_excerpt'] = wpse_40574_create_excerpt( $data['post_content'], $wpse_40574_custom_excerpt_length );
}
return $data;
}
/**
* Returns the original content string if its word count is lesser than $length,
* or a trimed version with the desired length.
* Reference: see this StackOverflow Q&A - http://stackoverflow.com/q/11521456/1287812
*/
function wpse_40574_create_excerpt( $content, $length = 20 )
{
$the_string = preg_replace( '#\s+#', ' ', $content );
$words = explode( ' ', $the_string );
/**
* The following is a more efficient way to split the $content into an array of words
* but has the caveat of spliting Url's into words ( removes the /, :, ., charachters )
* so, not very useful in this context, could be improved though.
* Note that $words[0] has to be used as the array to be dealt with (count, array_slice)
*/
//preg_match_all( '/\b[\w\d-]+\b/', $content, $words );
if( count($words) <= $length )
$result = $content;
else
$result = implode( ' ', array_slice( $words, 0, $length ) );
return $result;
}
Note
Example of default_excerpt filter usage:
add_filter( 'default_excerpt', 'wpse_40574_excerpt_content', 10, 2 );
function wpse_40574_excerpt_content( $post_excerpt, $post )
{
// Do nothing if not the correct post type
// http://codex.wordpress.org/Post_Types
if( 'post' != $post->post_type )
return;
$post_excerpt = "DEFAULT EXCERPT FOR POSTS OF THE TYPE -POST-";
return $post_excerpt;
}
Welcome to the Advanced Custom Fields community forum.
Browse through ideas, snippets of code, questions and answers between fellow ACF users
Helping others is a great way to earn karma, gain badges and help ACF development!
We use cookies to offer you a better browsing experience, analyze site traffic and personalize content. Read about how we use cookies and how you can control them in our Privacy Policy. If you continue to use this site, you consent to our use of cookies.