[wp-trac] [WordPress Trac] #57596: Categories/Tags: Quick Edit contents should only be rendered if quick edit is in actions after filtering.

WordPress Trac noreply at wordpress.org
Wed Feb 1 04:56:11 UTC 2023


#57596: Categories/Tags: Quick Edit contents should only be rendered if quick edit
is in actions after filtering.
-------------------------+-------------------------------------------------
 Reporter:  costdev      |      Owner:  (none)
     Type:  enhancement  |     Status:  new
 Priority:  normal       |  Milestone:  Awaiting Review
Component:  Quick/Bulk   |    Version:  3.0.4
  Edit                   |   Keywords:  needs-patch has-testing-info needs-
 Severity:  normal       |  testing 2nd-opinion
  Focuses:               |
-------------------------+-------------------------------------------------
 This is a follow-up to #16502.

 == Overview

 Despite Quick Edit being removed from the available actions, a
 `class="inline_<id>"` div is still rendered on the `Posts > Categories`
 and `Posts > Tags` screens.

 To prevent the div from rendering, [https://github.com/wordpress
 /wordpress-develop/blob/6.1/src/wp-admin/includes/class-wp-terms-list-
 table.php#L421-L426 this code] **(Ref 1)** must be rendered only if the
 `$actions` array includes the `inline hide-if-no-js` key.

 -----

 == The Problem

 The `$actions` array is currently created in the `::handle_row_actions()`
 method of `WP_Terms_List_Table`. This method returns an HTML string, not
 an array.

 -----

 == Possible Solution 1
 We could check the return value of `::handle_row_actions()` to see if it
 includes a substring, such as `editinline`, using `str_contains()`.
 However, this isn't a particularly clean solution, and is easily prone to
 regressions.

 == Possible Solution 2
 We could abstract [https://github.com/wordpress/wordpress-
 develop/blob/6.1/src/wp-admin/includes/class-wp-terms-list-
 table.php#L460-L537 this entire portion] **(Ref 2)** of the
 `::handle_row_actions()` method to a new method that returns `array
 $actions`.

 This new method would be called in `::handle_row_actions()` to retain
 existing functionality, as well as in `::column_name`:

 {{{#!php
 $actions = $this->get_row_actions();
 if ( isset( $actions['inline hide-if-no-js'] ) ) {
     // The code from (Ref 1)
 }
 }}}

 I'm adding `2nd-opinion` to gather thoughts on these possible solutions,
 and to explore other solutions you may have.

 -----

 == Reproduction/Testing Instructions

 === Steps to Reproduce or Test
 1. Create a new file `wp-content/plugins/test-quick-edit-removal.php` with
 the following contents:
 {{{#!php
 <?php
 /**
  * Plugin Name: Test Quick Edit Removal
  * Description: Tests the removal of Quick Edit Contents.
  * Author:      WordPress Core Contributors
  * Author URI:  https://make.wordpress.org/core
  * License:     GPLv2 or later
  * Version:     1.0.0
  */

 add_action( 'admin_bar_menu', 'test_qer_adminbar', 999 );
 add_filter( 'tag_row_actions', 'test_qer_hide_quick_edit', 10, 1 );

 function test_qer_adminbar( $wp_admin_bar ) {
         global $pagenow;
         $action = empty( $_GET['hide_quick_edit'] ) ? '1' : '0';
         $url    = add_query_arg( array_merge( $_GET, array(
 'hide_quick_edit' => $action ) ), admin_url( $pagenow ) );
         $wp_admin_bar->add_node( array( 'id' => 'test-qer', 'title' =>
 $action ? 'Remove Quick Edit' : 'Add Quick Edit', 'href' => $url ) );
 }

 function test_qer_hide_quick_edit( $actions ) {
         if ( isset( $_GET['hide_quick_edit'] ) && '1' ===
 $_GET['hide_quick_edit'] ) unset( $actions['inline hide-if-no-js'] );
         return $actions;
 }
 }}}
 2. Navigate to `Plugins > Installed Plugins` and activate **Test Quick
 Edit Removal**.
 3. Navigate to `Posts > Categories`.
 4. Open DevTools and inspect a category's title.
 5. Below the category's title `<strong>` markup, there will be `<div
 class="hidden" id="inline_XXXX">` element.
 6. In the admin bar, click "Remove Quick Edit".
 7. 🐞 Repeat steps 4-5.
 8. Click "Add Quick Edit".
 9. Apply a patch.
 10. ✅ Repeat steps 3-7.
 11. Repeat steps 3-10 for `Posts > Tags`.

 === Expected Results
 When reproducing a bug:
 - ❌ The hidden "inline_XXXX" element should exist even though "Quick
 Edit" is removed.

 When testing a patch to validate it works as expected:
 - ✅ Posts (and other screens): The element should no longer exist when
 "Quick Edit" is removed.

-- 
Ticket URL: <https://core.trac.wordpress.org/ticket/57596>
WordPress Trac <https://core.trac.wordpress.org/>
WordPress publishing platform


More information about the wp-trac mailing list