Does anyone know a way to change the mode of all blocks on a page with a single function? I tried doing a str_replace on the post_content but ended up breaking something and ACF wasn’t happy with me on page reload. Here is as far as I got:
if( ! function_exists( 'cs_close_blocks' ) ) :
function cs_close_blocks( $post_id ) {
$the_post = get_post( $post_id );
if( is_wp_error( $the_post ) ) return false;
// if there are blocks
if ( has_blocks( $the_post->post_content ) ) :
// Update
$new_content = str_replace('"mode": "edit"','"mode": "preview"', $the_post->post_content); // <= exactly as ACF writes it
// Save it
wp_update_post( array(
'ID' => $post_id,
'post_content' => $new_content,
));
endif;
return true;
}
endif;
Is there a better way? Any thoughts?
Sorry if this has already been answered somewhere.
If anyone is interested…
I’m not sure if the following change fixed it or it resolved itself somewhere else in my code, but this has been working for all of my tests so far.
if( ! function_exists( 'cs_close_blocks' ) ) :
function cs_close_blocks( $post_id ) {
$the_post = get_post( $post_id );
if( is_wp_error( $the_post ) ) return false;
// if there are blocks
if ( has_blocks( $the_post->post_content ) ) :
// Update
$the_post->post_content = str_replace('"mode": "edit"','"mode": "preview"', $the_post->post_content); // <= exactly as ACF writes it
// Save it
wp_update_post( $the_post );
endif;
return true;
}
endif;