[wp-trac] [WordPress Trac] #49614: Add an action for wp_media_attach_action events

WordPress Trac noreply at wordpress.org
Tue Mar 10 13:27:34 UTC 2020


#49614: Add an action for wp_media_attach_action events
----------------------------+------------------------------
 Reporter:  jonoaldersonwp  |       Owner:  (none)
     Type:  defect (bug)    |      Status:  new
 Priority:  normal          |   Milestone:  Awaiting Review
Component:  General         |     Version:
 Severity:  normal          |  Resolution:
 Keywords:                  |     Focuses:  administration
----------------------------+------------------------------
Description changed by jonoaldersonwp:

Old description:

> When a user attaches or detaches media to/from a post,
> `wp_media_attach_action()` is called.
>
> See https://github.com/WordPress/WordPress/blob/master/wp-
> admin/includes/media.php#L3694
>
> This function sets or removes a `post_parent` value on an attachment post
> by updating `$wpdb->posts`.
>
> At the moment, there's no way for plugins or integrations to take action
> based on these events; making it incredibly difficult to alter or add to
> the behaviour or outcomes of these processes.
>
> Specifically, it limits the ability to maintain an up-to-date overview of
> the relationships between posts and their attachments.
>
> To address this, **we should add an action hook following the successful
> execution of the query** (i.e., if `$results` returns true), using either
> of the following approaches:
>   - `do_action('wp_media_attach_action', $attach, $attachment_id,
> $parent_id)` (where `$attach` is `true` for 'attach' actions, and `false`
> for 'detach' actions); OR
>   - Conditionally either `do_action('wp_media_attach_action_attach',
> $attachment_id, $parent_id)` or
> `do_action('wp_media_attach_action_detach', $attachment_id, $parent_id)`.
>
> This will allow plugins and integrations to take arbitrary action based
> on attaching/detaching media, with the option to consider the type of
> action, the parent, and the attachment itself.
>
> Note that I considered that `clean_attachment_cache()` is hookable (and
> executed in the `wp_media_attach_action()` function), but only passes the
> `post_id`; lacking the critical context of the parent, and the
> attachment/detachment status. This also appears to fire before any
> validation that the query was successful, which strikes me as strange.

New description:

 When a user attaches or detaches media to/from a post,
 `wp_media_attach_action()` is called.

 See https://github.com/WordPress/WordPress/blob/master/wp-
 admin/includes/media.php#L3694

 This function sets or removes a `post_parent` value on an attachment post
 by updating `$wpdb->posts`.

 At the moment, there's no way for plugins or integrations to take action
 based on these events; making it incredibly difficult to alter or add to
 the behaviour or outcomes of these processes.

 To address this, **we should add an action hook following the successful
 execution of the query** (i.e., if `$results` returns true), using either
 of the following approaches:
   - `do_action('wp_media_attach_action', $attach, $attachment_id,
 $parent_id)` (where `$attach` is `true` for 'attach' actions, and `false`
 for 'detach' actions); OR
   - Conditionally either `do_action('wp_media_attach_action_attach',
 $attachment_id, $parent_id)` or
 `do_action('wp_media_attach_action_detach', $attachment_id, $parent_id)`.

 This will allow plugins and integrations to take arbitrary action based on
 attaching/detaching media, with the option to consider the type of action,
 the parent, and the attachment itself.

 Note that I considered that `clean_attachment_cache()` is hookable (and
 executed in the `wp_media_attach_action()` function), but only passes the
 `post_id`; lacking the critical context of the parent, and the
 attachment/detachment status. This also appears to fire before any
 validation that the query was successful, which strikes me as strange.

--

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


More information about the wp-trac mailing list