[wp-trac] [WordPress Trac] #60928: Interactivity API: Fatal error with empty image

WordPress Trac noreply at wordpress.org
Tue Jun 11 23:41:15 UTC 2024


#60928: Interactivity API: Fatal error with empty image
-------------------------------------+----------------------
 Reporter:  donohoe                  |       Owner:  (none)
     Type:  defect (bug)             |      Status:  closed
 Priority:  normal                   |   Milestone:
Component:  Editor                   |     Version:  6.5.4
 Severity:  normal                   |  Resolution:  invalid
 Keywords:  reporter-feedback close  |     Focuses:
-------------------------------------+----------------------

Comment (by fnorte):

 Oh sit I can't delete my supid post, goes to hall of shame...
 IGNORE THIS PLEASE
 I realized the stupid problem in my  code (not mine, legacy), the
 WordPress fixed this issue..
 If There is no return to the hook, there is null ...
 change the final lines:
 {{{
           return $new_content;
         }else{
           return $block_content;
         }
       }else{
         return $block_content;
       }
     }
   }
  add_filter( 'render_block', 'change_image_block', 10, 2 );

 }}}


 FIXING:
 {{{
           return $new_content;
         }
       }
    }
    return $block_content;
   }
  add_filter( 'render_block', 'change_image_block', 10, 2 );
 }}}



 Replying to [comment:16 fnorte]:
 > I Discovery the problem is in this function bellow, commenting the hook
 and resolve the error, my I'm losting my resource:
 >
 > What WordPress change to cause this error?
 > How can I implement this better?
 >
 > {{{
 >
 >   //Adicionado crédito as imagens inseridas no Gutenberg
 >   function change_image_block( $block_content, $block ) {
 >     if(!is_admin()){
 >       if ($block['blockName'] === 'core/image') {
 >         if( str_contains( $block['innerHTML'], 'figure')){
 >           if( str_contains( $block['innerHTML'], 'figcaption')){
 >             $block_caption = true;
 >           }else{
 >             $block_caption = false;
 >           }
 >           $imagem_id = $block['attrs']['id'];
 >           $imagem = get_post( $imagem_id );
 >           $imagem_legenda = isset($imagem->post_excerpt) ?
 $imagem->post_excerpt : null;
 >           $imagem_credito = isset($imagem->post_content) ?
 $imagem->post_content : null;
 >           $imagem_full = isset(wp_get_attachment_image_src($imagem_id,
 'normal-full')[0]) ? wp_get_attachment_image_src($imagem_id, 'normal-
 full')[0] : null;
 >           $imagem_desktop =
 isset(wp_get_attachment_image_src($imagem_id, 'normal-desktop')[0]) ?
 wp_get_attachment_image_src($imagem_id, 'normal-desktop')[0] : null;
 >           $imagem_mobile = isset(wp_get_attachment_image_src($imagem_id,
 'normal-mobile')[0]) ? wp_get_attachment_image_src($imagem_id, 'normal-
 mobile')[0] : null;
 >           $imagem_alt = get_post_meta($imagem_id,
 '_wp_attachment_image_alt', true );
 >           if($block_caption){
 >             $search =
 "/(<figure(.*?)>)(.*?)(<figcaption(.*?)>)(.*?)(<\/figcaption>)(<\/figure>)/";
 >             if($imagem_credito){
 >               $figcaption = '<figcaption $5><small class="image-
 subtitle">$6</small><small class="image-credit">(foto:
 '.$imagem_credito.')</small></figcaption>';
 >               $alt = $imagem_alt.' - (foto: '.$imagem_credito.')';
 >             }else{
 >               $figcaption = '<figcaption $5><small class="image-
 subtitle">$6</small></figcaption>';
 >               $alt = $imagem_alt;
 >             }
 >           }else{
 >             $search = "/(<figure(.*?)>)(.*?)(<\/figure>)/";
 >             if($imagem_credito){
 >               $figcaption = '<figcaption class="wp-element-
 caption"><small class="image-credit">(foto:
 '.$imagem_credito.')</small></figcaption>';
 >               $alt = '(foto: '.$imagem_credito.')';
 >             }else{
 >               $figcaption = '';
 >               $alt = '';
 >             }
 >           }
 >           if(isset($block['attrs']['width'])){
 >             $width = $block['attrs']['width'];
 >           }else{
 >             $width = '100%';
 >           }
 >           if(isset($block['attrs']['height'])){
 >             $height = $block['attrs']['height'];
 >           }else{
 >             $height = '100%';
 >           }
 >           if( str_contains( $block['innerHTML'], 'is-resized')){
 >             $replace = '<div class="wp-block-image"><figure $2>
 >             <picture>
 >               <source srcset="'.$imagem_mobile.'" media="(max-width:
 1023px)">
 >               <source srcset="'.$imagem_desktop.'" media="(min-width:
 1024px) and (max-width: 1399px)">
 >               <source srcset="'.$imagem_full.'" media="(min-width:
 1400px)">
 >               <img loading="eager" width="'.$width.'"
 height="'.$height.'" src="'.$imagem_full.'"  title="'.$alt.'"
 alt="'.$alt.'">
 >             </picture>'.$figcaption.'</figure></div>';
 >           }else{
 >             $replace = '<figure $2>
 >             <picture>
 >               <source srcset="'.$imagem_mobile.'" media="(max-width:
 1023px)">
 >               <source srcset="'.$imagem_desktop.'" media="(min-width:
 1024px) and (max-width: 1399px)">
 >               <source srcset="'.$imagem_full.'" media="(min-width:
 1400px)">
 >               <img loading="eager" width="'.$width.'"
 height="'.$height.'" src="'.$imagem_full.'"  title="'.$alt.'"
 alt="'.$alt.'">
 >             </picture>'.$figcaption.'</figure>';
 >           }
 >           $new_content = preg_replace($search, $replace,
 $block_content);
 >           return $new_content;
 >         }else{
 >           return $block_content;
 >         }
 >       }else{
 >         return $block_content;
 >       }
 >     }
 >   }
 >   // add_filter( 'render_block', 'change_image_block', 10, 2 );
 > }}}
 >
 >
 > Replying to [comment:15 fnorte]:
 > > Thsi closed issue happening with me too, after upgrade from 6.4.3 to
 6.5.4, but in all post with the image block on content. like this...
 > >
 > > {{{
 > > <!-- wp:image {"id":226159,"sizeSlug":"full","linkDestination":"none"}
 -->
 > > <figure class="wp-block-image size-full"><img
 src="https://noataque.local/wp-
 content/uploads/2024/06/53782904335_2d2f19b211_c.jpg" alt="Gustavo Scarpa
 deve atuar novamente pelo lado esquerdo no Atlético" class="wp-
 image-226159"/><figcaption class="wp-element-caption">Gustavo Scarpa deve
 atuar novamente pelo lado esquerdo no Atlético</figcaption></figure>
 > > <!-- /wp:image -->
 > > }}}
 > >
 > > I made some tests removing the block and work withouth problemas.
 > > I got back to old version (6.4.3) and works withouth problem.
 > >
 > > Is a legacy code, and have several issues on them, the most relevant
 is full of custom post types and taxonomies.
 > >
 > > I trying to figured out how to identify what is causing that in my own
 theme code.
 > >
 > >
 > > {{{
 > > [11-Jun-2024 22:39:52 UTC] PHP Fatal error:  Uncaught TypeError:
 {closure}(): Argument #1 ($content) must be of type string, null given,
 called in /var/www/noataque/public_html/wp-includes/class-wp-hook.php on
 line 326 and defined in /var/www/noataque/public_html/wp-includes
 /interactivity-api/interactivity-api.php:46
 > > Stack trace:
 > > #0 /var/www/noataque/public_html/wp-includes/class-wp-hook.php(326):
 {closure}()
 > > #1 /var/www/noataque/public_html/wp-includes/plugin.php(205):
 WP_Hook->apply_filters()
 > > #2 /var/www/noataque/public_html/wp-includes/class-wp-block.php(525):
 apply_filters()
 > > #3 /var/www/noataque/public_html/wp-includes/blocks.php(1705):
 WP_Block->render()
 > > #4 /var/www/noataque/public_html/wp-includes/blocks.php(1743):
 render_block()
 > > #5 /var/www/noataque/public_html/wp-includes/class-wp-hook.php(324):
 do_blocks()
 > > #6 /var/www/noataque/public_html/wp-includes/plugin.php(205):
 WP_Hook->apply_filters()
 > > #7 /var/www/noataque/public_html/wp-includes/rest-api/endpoints/class-
 wp-rest-posts-controller.php(1865): apply_filters()
 > > #8 /var/www/noataque/public_html/wp-includes/rest-api/endpoints/class-
 wp-rest-posts-controller.php(569):
 WP_REST_Posts_Controller->prepare_item_for_response()
 > > #9 /var/www/noataque/public_html/wp-includes/rest-api/class-wp-rest-
 server.php(1230): WP_REST_Posts_Controller->get_item()
 > > #10 /var/www/noataque/public_html/wp-includes/rest-api/class-wp-rest-
 server.php(1063): WP_REST_Server->respond_to_request()
 > > #11 /var/www/noataque/public_html/wp-includes/rest-api.php(555):
 WP_REST_Server->dispatch()
 > > #12 /var/www/noataque/public_html/wp-includes/rest-api.php(2922):
 rest_do_request()
 > > #13 [internal function]: rest_preload_api_request()
 > > #14 /var/www/noataque/public_html/wp-includes/block-editor.php(753):
 array_reduce()
 > > #15 /var/www/noataque/public_html/wp-admin/edit-form-blocks.php(77):
 block_editor_rest_api_preload()
 > > #16 /var/www/noataque/public_html/wp-admin/post.php(187):
 require('...')
 > > #17 {main}
 > >   thrown in /var/www/noataque/public_html/wp-includes/interactivity-
 api/interactivity-api.php on line 46
 > >
 > > }}}
 > >

-- 
Ticket URL: <https://core.trac.wordpress.org/ticket/60928#comment:17>
WordPress Trac <https://core.trac.wordpress.org/>
WordPress publishing platform


More information about the wp-trac mailing list