[wp-trac] [WordPress Trac] #40958: force_balance_tags breaks Ninjaforms and probably other plugins that output html within js.

WordPress Trac noreply at wordpress.org
Fri Jun 28 10:54:23 UTC 2024


#40958: force_balance_tags breaks Ninjaforms and probably other plugins that output
html within js.
--------------------------+---------------------------------
 Reporter:  programmin    |       Owner:  (none)
     Type:  defect (bug)  |      Status:  new
 Priority:  normal        |   Milestone:  Awaiting Review
Component:  Shortcodes    |     Version:  4.7.4
 Severity:  normal        |  Resolution:
 Keywords:                |     Focuses:  ui, administration
--------------------------+---------------------------------

Comment (by Digitalmind1):

 Replying to [comment:3 semenov10]:
 > I have been following the discussion regarding the issue with
 `force_balance_tags` affecting NinjaForms and potentially other plugins
 that output HTML within JavaScript.
 >
 >  Issue Description
 >
 > As described, the `force_balance_tags` function is causing additional
 closing tags to be inserted into the content processed by the
 `the_content` filter. This is particularly problematic for shortcodes like
 `[ninja_form id=14]`, where the inserted tags break the intended script.
 >
 >  Example Demonstration
 >
 > To illustrate the issue:
 >
 > {{{#!php
 > <?php
 > ```php
 > echo 'NO BALANCE:--' . apply_filters('the_content', '[ninja_form
 id=14]') . ' --END NO BALANCE. ';
 > echo 'BALANCED:--' . force_balance_tags(apply_filters('the_content',
 '[ninja_form id=14]')) . ' --END BALANCED. ';
 > ```
 >
 > In the above example, the output shows that the `force_balance_tags`
 function adds unwanted closing tags, which disrupts the form's
 functionality.
 >
 >  Suggested Workaround
 >
 > To temporarily address this issue, we can use a custom shortcode handler
 that bypasses `force_balance_tags`. Here’s a potential workaround:
 >
 > ```php
 > remove_filter('the_content', 'force_balance_tags');
 >
 > function my_ninja_form_shortcode_handler($atts) {
 >     $form_id = isset($atts['id']) ? intval($atts['id']) : 0;
 >     return ninja_forms_display_form(array('id' => $form_id));
 > }
 > add_shortcode('my_ninja_form', 'my_ninja_form_shortcode_handler');
 >
 > $content_with_shortcodes = apply_filters('the_content', '[my_ninja_form
 id=14]');
 > add_filter('the_content', 'force_balance_tags');
 >
 > echo $content_with_shortcodes;
 > ```
 >
 >  Proposed Long-Term Solution
 >
 > To prevent such issues in the future, it would be beneficial if there
 were a filter applied at the end of the `force_balance_tags` function.
 This filter would allow developers to clean up any bugs resulting from
 additional tags.
 >
 > For example, implementing a filter like this:
 >
 > ```php
 > function custom_force_balance_tags($content) {
 >     $content = force_balance_tags($content);
 >     return apply_filters('after_force_balance_tags', $content);
 > }
 > add_filter('the_content', 'custom_force_balance_tags', 20);
 > ```
 > }}}
 >
 >
 > This approach provides a hook (`after_force_balance_tags`) that
 developers can use to further process the content if needed, addressing
 specific issues like the one with NinjaForms.
 >
 >  Conclusion
 >
 > Implementing a filter at the end of the `force_balance_tags` function
 can provide a flexible solution for developers to handle edge cases
 without disrupting the default behavior. I hope this suggestion can be
 considered to enhance the robustness of content handling in WordPress.
 >
 > Thank you for your attention to this matter, and I look forward to
 further discussions on this topic.
 >
 > {{{ #!html
 >
 > <a href="https://www.smallbusinessseoservices.co.uk/"></a>
 >
 > }}}

 Hi

 Did you try to exclude only the inline script?

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


More information about the wp-trac mailing list