Support

Account

Home Forums Gutenberg Close all blocks in a page ("mode" to "preview") with single click

Helping

Close all blocks in a page ("mode" to "preview") with single click

  • 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;
    
Viewing 2 posts - 1 through 2 (of 2 total)

You must be logged in to reply to this topic.