WP_REST_Attachments_Controller::insert_attachment( WP_REST_Request $request ): array|WP_Error
- Since
- 5.3.0
- Source
wp-includes/rest-api/endpoints/class-wp-rest-attachments-controller.php:302
Compatibility
- WordPress
- since 5.3.0
- PHP
- 7.4–8.6-dev
- 6.7.7
- 6.8.8
- 6.9.7
- 7.0.4
- 7.1.0
Present in every tracked release (6.7.7 to 7.1.0), and compiles on PHP 7.4 through 8.6-dev.
Parameters
$requestWP_REST_Request
Return value
array|WP_Error
Performance profile
How much work a call to WP_REST_Attachments_Controller::insert_attachment() does, and what it touches: the algorithmic scaling, the Zend instruction count per call across PHP versions, the hooks it hands control to, and the core code that calls it. Measured from the compiled opcodes, not a stopwatch, so every number is identical on any machine running the same PHP version, and every function in core is ranked by cost.
- Cost class
- Heavy
- Scaling
- Constant
- Instructions
- 24–164
- Plugin surface
- 1 hook
- Called by
- 1
Reaches the database via get_post().
No loop in the body: the same number of instructions runs whatever you pass in.
Executed per call on PHP 8.5, depending on the branch taken. The body compiles to 201.
Third-party callbacks on 'rest_insert_attachment' run inside this call, and their cost is not bounded by anything here.
1 place in core call this, so the cost is paid more often than your own code shows.
What it touches
- querycontent query
get_post()called directly - hookthird-party callbacks
do_action()called directly
Further down the call graph this can also reach option, serialize, cache and transient. Those are the worst case, several calls deep and usually down an error path, not what a normal call pays.
What one call costs · 82 distinct outcomes
One number would be a lie: the work depends on which branch runs. These are every distinct cost WP_REST_Attachments_Controller::insert_attachment() can have, taken from its control-flow graph on PHP 8.5.
| When | Instructions | Calls it makes |
|---|---|---|
empty($request) && !empty($files) && is_wp_error() | 24 | ->get_file_params(), ->get_headers(), ->upload_from_file(), is_wp_error() |
empty($request) && empty($files) && is_wp_error() | 25 | ->get_file_params(), ->get_headers(), ->get_body(), ->upload_from_data(), is_wp_error() |
empty($request) && !empty($files) && !empty($attachment) && !$alt | 95–118 | ->get_file_params(), ->get_headers(), ->upload_from_file(), is_wp_error(), wp_basename(), pathinfo(), wp_read_image_metadata(), ->prepare_item_for_database(), wp_slash(), wp_insert_attachment(), is_wp_error(), ->get_error_code(), ->add_data() |
empty($request) && empty($files) && !empty($attachment) && !$alt | 96–119 | ->get_file_params(), ->get_headers(), ->get_body(), ->upload_from_data(), is_wp_error(), wp_basename(), pathinfo(), wp_read_image_metadata(), ->prepare_item_for_database(), wp_slash(), wp_insert_attachment(), is_wp_error(), ->get_error_code(), ->add_data() |
empty($request) && !empty($files) && !is_wp_error() && !empty($attachment) && !$alt | 100–123 | ->get_file_params(), ->get_headers(), ->upload_from_file(), is_wp_error(), wp_basename(), pathinfo(), wp_read_image_metadata(), ->prepare_item_for_database(), wp_slash(), wp_insert_attachment(), is_wp_error(), get_post(), do_action() |
empty($request) && empty($files) && !is_wp_error() && !empty($attachment) && !$alt | 101–124 | ->get_file_params(), ->get_headers(), ->get_body(), ->upload_from_data(), is_wp_error(), wp_basename(), pathinfo(), wp_read_image_metadata(), ->prepare_item_for_database(), wp_slash(), wp_insert_attachment(), is_wp_error(), get_post(), do_action() |
empty($request) && !empty($files) && empty($attachment) && !$alt | 102–125 | ->get_file_params(), ->get_headers(), ->upload_from_file(), is_wp_error(), wp_basename(), pathinfo(), wp_read_image_metadata(), ->prepare_item_for_database(), wp_basename(), wp_slash(), wp_insert_attachment(), is_wp_error(), ->get_error_code(), ->add_data() |
empty($request) && empty($files) && empty($attachment) && !$alt | 103–126 | ->get_file_params(), ->get_headers(), ->get_body(), ->upload_from_data(), is_wp_error(), wp_basename(), pathinfo(), wp_read_image_metadata(), ->prepare_item_for_database(), wp_basename(), wp_slash(), wp_insert_attachment(), is_wp_error(), ->get_error_code(), ->add_data() |
empty($request) && !empty($files) && !empty($attachment) && $alt | 103–126 | ->get_file_params(), ->get_headers(), ->upload_from_file(), is_wp_error(), wp_basename(), pathinfo(), wp_read_image_metadata(), ->prepare_item_for_database(), wp_slash(), wp_insert_attachment(), sanitize_text_field(), update_post_meta(), is_wp_error(), ->get_error_code(), ->add_data() |
!empty($request) && empty($files) && !empty($attachment) && !$alt | 103–123 | ->get_file_params(), ->get_headers(), get_post(), ->get_body(), ->upload_from_data(), is_wp_error(), wp_basename(), pathinfo(), wp_read_image_metadata(), ->prepare_item_for_database(), wp_slash(), wp_insert_attachment(), is_wp_error(), ->get_error_code(), ->add_data() |
empty($request) && empty($files) && !empty($attachment) && $alt | 104–127 | ->get_file_params(), ->get_headers(), ->get_body(), ->upload_from_data(), is_wp_error(), wp_basename(), pathinfo(), wp_read_image_metadata(), ->prepare_item_for_database(), wp_slash(), wp_insert_attachment(), sanitize_text_field(), update_post_meta(), is_wp_error(), ->get_error_code(), ->add_data() |
empty($request) && !empty($files) && !is_wp_error() && empty($attachment) && !$alt | 107–130 | ->get_file_params(), ->get_headers(), ->upload_from_file(), is_wp_error(), wp_basename(), pathinfo(), wp_read_image_metadata(), ->prepare_item_for_database(), wp_basename(), wp_slash(), wp_insert_attachment(), is_wp_error(), get_post(), do_action() |
70 further outcomes, up to 164 instructions
empty($request) && empty($files) && !is_wp_error() && empty($attachment) && !$alt | 108–131 | ->get_file_params(), ->get_headers(), ->get_body(), ->upload_from_data(), is_wp_error(), wp_basename(), pathinfo(), wp_read_image_metadata(), ->prepare_item_for_database(), wp_basename(), wp_slash(), wp_insert_attachment(), is_wp_error(), get_post(), do_action() |
empty($request) && !empty($files) && !is_wp_error() && !empty($attachment) && $alt | 108–131 | ->get_file_params(), ->get_headers(), ->upload_from_file(), is_wp_error(), wp_basename(), pathinfo(), wp_read_image_metadata(), ->prepare_item_for_database(), wp_slash(), wp_insert_attachment(), sanitize_text_field(), update_post_meta(), is_wp_error(), get_post(), do_action() |
!empty($request) && empty($files) && !is_wp_error() && !empty($attachment) && !$alt | 108–128 | ->get_file_params(), ->get_headers(), get_post(), ->get_body(), ->upload_from_data(), is_wp_error(), wp_basename(), pathinfo(), wp_read_image_metadata(), ->prepare_item_for_database(), wp_slash(), wp_insert_attachment(), is_wp_error(), get_post(), do_action() |
empty($request) && empty($files) && !is_wp_error() && !empty($attachment) && $alt | 109–132 | ->get_file_params(), ->get_headers(), ->get_body(), ->upload_from_data(), is_wp_error(), wp_basename(), pathinfo(), wp_read_image_metadata(), ->prepare_item_for_database(), wp_slash(), wp_insert_attachment(), sanitize_text_field(), update_post_meta(), is_wp_error(), get_post(), do_action() |
empty($request) && !empty($files) && empty($attachment) && $alt | 110–133 | ->get_file_params(), ->get_headers(), ->upload_from_file(), is_wp_error(), wp_basename(), pathinfo(), wp_read_image_metadata(), ->prepare_item_for_database(), wp_basename(), wp_slash(), wp_insert_attachment(), sanitize_text_field(), update_post_meta(), is_wp_error(), ->get_error_code(), ->add_data() |
!empty($request) && empty($files) && empty($attachment) && !$alt | 110–128 | ->get_file_params(), ->get_headers(), get_post(), ->get_body(), ->upload_from_data(), is_wp_error(), wp_basename(), pathinfo(), wp_read_image_metadata(), ->prepare_item_for_database(), wp_basename(), wp_slash(), wp_insert_attachment(), is_wp_error(), ->get_error_code(), ->add_data() |
empty($request) && !empty($files) && !empty($value) && !$alt | 111–133 | ->get_file_params(), ->get_headers(), ->upload_from_file(), is_wp_error(), wp_basename(), pathinfo(), wp_read_image_metadata(), ->prepare_item_for_database(), strrpos(), wp_slash(), wp_insert_attachment(), is_wp_error(), ->get_error_code(), ->add_data() |
empty($request) && !empty($files) && !empty($image_meta) && !empty($attachment) && !$alt | 111–128 | ->get_file_params(), ->get_headers(), ->upload_from_file(), is_wp_error(), wp_basename(), pathinfo(), wp_read_image_metadata(), sanitize_title(), ->prepare_item_for_database(), wp_slash(), wp_insert_attachment(), is_wp_error(), ->get_error_code(), ->add_data() |
empty($request) && empty($files) && empty($attachment) && $alt | 111–134 | ->get_file_params(), ->get_headers(), ->get_body(), ->upload_from_data(), is_wp_error(), wp_basename(), pathinfo(), wp_read_image_metadata(), ->prepare_item_for_database(), wp_basename(), wp_slash(), wp_insert_attachment(), sanitize_text_field(), update_post_meta(), is_wp_error(), ->get_error_code(), ->add_data() |
!empty($request) && empty($files) && !empty($attachment) && $alt | 111–129 | ->get_file_params(), ->get_headers(), get_post(), ->get_body(), ->upload_from_data(), is_wp_error(), wp_basename(), pathinfo(), wp_read_image_metadata(), ->prepare_item_for_database(), wp_slash(), wp_insert_attachment(), sanitize_text_field(), update_post_meta(), is_wp_error(), ->get_error_code(), ->add_data() |
empty($request) && empty($files) && !empty($value) && !$alt | 112–134 | ->get_file_params(), ->get_headers(), ->get_body(), ->upload_from_data(), is_wp_error(), wp_basename(), pathinfo(), wp_read_image_metadata(), ->prepare_item_for_database(), strrpos(), wp_slash(), wp_insert_attachment(), is_wp_error(), ->get_error_code(), ->add_data() |
empty($request) && empty($files) && !empty($image_meta) && !empty($attachment) && !$alt | 112–129 | ->get_file_params(), ->get_headers(), ->get_body(), ->upload_from_data(), is_wp_error(), wp_basename(), pathinfo(), wp_read_image_metadata(), sanitize_title(), ->prepare_item_for_database(), wp_slash(), wp_insert_attachment(), is_wp_error(), ->get_error_code(), ->add_data() |
empty($request) && !empty($files) && !is_wp_error() && empty($attachment) && $alt | 115–138 | ->get_file_params(), ->get_headers(), ->upload_from_file(), is_wp_error(), wp_basename(), pathinfo(), wp_read_image_metadata(), ->prepare_item_for_database(), wp_basename(), wp_slash(), wp_insert_attachment(), sanitize_text_field(), update_post_meta(), is_wp_error(), get_post(), do_action() |
!empty($request) && empty($files) && !is_wp_error() && empty($attachment) && !$alt | 115–133 | ->get_file_params(), ->get_headers(), get_post(), ->get_body(), ->upload_from_data(), is_wp_error(), wp_basename(), pathinfo(), wp_read_image_metadata(), ->prepare_item_for_database(), wp_basename(), wp_slash(), wp_insert_attachment(), is_wp_error(), get_post(), do_action() |
empty($request) && !empty($files) && !is_wp_error() && !empty($value) && !$alt | 116–138 | ->get_file_params(), ->get_headers(), ->upload_from_file(), is_wp_error(), wp_basename(), pathinfo(), wp_read_image_metadata(), ->prepare_item_for_database(), strrpos(), wp_slash(), wp_insert_attachment(), is_wp_error(), get_post(), do_action() |
empty($request) && !empty($files) && !is_wp_error() && !empty($image_meta) && !empty($attachment) && !$alt | 116–133 | ->get_file_params(), ->get_headers(), ->upload_from_file(), is_wp_error(), wp_basename(), pathinfo(), wp_read_image_metadata(), sanitize_title(), ->prepare_item_for_database(), wp_slash(), wp_insert_attachment(), is_wp_error(), get_post(), do_action() |
empty($request) && empty($files) && !is_wp_error() && empty($attachment) && $alt | 116–139 | ->get_file_params(), ->get_headers(), ->get_body(), ->upload_from_data(), is_wp_error(), wp_basename(), pathinfo(), wp_read_image_metadata(), ->prepare_item_for_database(), wp_basename(), wp_slash(), wp_insert_attachment(), sanitize_text_field(), update_post_meta(), is_wp_error(), get_post(), do_action() |
!empty($request) && empty($files) && !is_wp_error() && !empty($attachment) && $alt | 116–134 | ->get_file_params(), ->get_headers(), get_post(), ->get_body(), ->upload_from_data(), is_wp_error(), wp_basename(), pathinfo(), wp_read_image_metadata(), ->prepare_item_for_database(), wp_slash(), wp_insert_attachment(), sanitize_text_field(), update_post_meta(), is_wp_error(), get_post(), do_action() |
empty($request) && empty($files) && !is_wp_error() && !empty($value) && !$alt | 117–139 | ->get_file_params(), ->get_headers(), ->get_body(), ->upload_from_data(), is_wp_error(), wp_basename(), pathinfo(), wp_read_image_metadata(), ->prepare_item_for_database(), strrpos(), wp_slash(), wp_insert_attachment(), is_wp_error(), get_post(), do_action() |
empty($request) && empty($files) && !is_wp_error() && !empty($image_meta) && !empty($attachment) && !$alt | 117–134 | ->get_file_params(), ->get_headers(), ->get_body(), ->upload_from_data(), is_wp_error(), wp_basename(), pathinfo(), wp_read_image_metadata(), sanitize_title(), ->prepare_item_for_database(), wp_slash(), wp_insert_attachment(), is_wp_error(), get_post(), do_action() |
empty($request) && !empty($files) && empty($attachment) && !empty($value) && !$alt | 118–140 | ->get_file_params(), ->get_headers(), ->upload_from_file(), is_wp_error(), wp_basename(), pathinfo(), wp_read_image_metadata(), ->prepare_item_for_database(), strrpos(), wp_basename(), wp_slash(), wp_insert_attachment(), is_wp_error(), ->get_error_code(), ->add_data() |
empty($request) && !empty($files) && !empty($image_meta) && empty($attachment) && !$alt | 118–135 | ->get_file_params(), ->get_headers(), ->upload_from_file(), is_wp_error(), wp_basename(), pathinfo(), wp_read_image_metadata(), sanitize_title(), ->prepare_item_for_database(), wp_basename(), wp_slash(), wp_insert_attachment(), is_wp_error(), ->get_error_code(), ->add_data() |
!empty($request) && empty($files) && empty($attachment) && $alt | 118–136 | ->get_file_params(), ->get_headers(), get_post(), ->get_body(), ->upload_from_data(), is_wp_error(), wp_basename(), pathinfo(), wp_read_image_metadata(), ->prepare_item_for_database(), wp_basename(), wp_slash(), wp_insert_attachment(), sanitize_text_field(), update_post_meta(), is_wp_error(), ->get_error_code(), ->add_data() |
empty($request) && empty($files) && empty($attachment) && !empty($value) && !$alt | 119–141 | ->get_file_params(), ->get_headers(), ->get_body(), ->upload_from_data(), is_wp_error(), wp_basename(), pathinfo(), wp_read_image_metadata(), ->prepare_item_for_database(), strrpos(), wp_basename(), wp_slash(), wp_insert_attachment(), is_wp_error(), ->get_error_code(), ->add_data() |
empty($request) && empty($files) && !empty($image_meta) && empty($attachment) && !$alt | 119–136 | ->get_file_params(), ->get_headers(), ->get_body(), ->upload_from_data(), is_wp_error(), wp_basename(), pathinfo(), wp_read_image_metadata(), sanitize_title(), ->prepare_item_for_database(), wp_basename(), wp_slash(), wp_insert_attachment(), is_wp_error(), ->get_error_code(), ->add_data() |
empty($request) && !empty($files) && !empty($value) && $alt | 119–141 | ->get_file_params(), ->get_headers(), ->upload_from_file(), is_wp_error(), wp_basename(), pathinfo(), wp_read_image_metadata(), ->prepare_item_for_database(), strrpos(), wp_slash(), wp_insert_attachment(), sanitize_text_field(), update_post_meta(), is_wp_error(), ->get_error_code(), ->add_data() |
empty($request) && !empty($files) && !empty($image_meta) && !empty($attachment) && $alt | 119–136 | ->get_file_params(), ->get_headers(), ->upload_from_file(), is_wp_error(), wp_basename(), pathinfo(), wp_read_image_metadata(), sanitize_title(), ->prepare_item_for_database(), wp_slash(), wp_insert_attachment(), sanitize_text_field(), update_post_meta(), is_wp_error(), ->get_error_code(), ->add_data() |
!empty($request) && empty($files) && !empty($value) && !$alt | 119–136 | ->get_file_params(), ->get_headers(), get_post(), ->get_body(), ->upload_from_data(), is_wp_error(), wp_basename(), pathinfo(), wp_read_image_metadata(), ->prepare_item_for_database(), strrpos(), wp_slash(), wp_insert_attachment(), is_wp_error(), ->get_error_code(), ->add_data() |
empty($request) && empty($files) && !empty($value) && $alt | 120–142 | ->get_file_params(), ->get_headers(), ->get_body(), ->upload_from_data(), is_wp_error(), wp_basename(), pathinfo(), wp_read_image_metadata(), ->prepare_item_for_database(), strrpos(), wp_slash(), wp_insert_attachment(), sanitize_text_field(), update_post_meta(), is_wp_error(), ->get_error_code(), ->add_data() |
empty($request) && empty($files) && !empty($image_meta) && !empty($attachment) && $alt | 120–137 | ->get_file_params(), ->get_headers(), ->get_body(), ->upload_from_data(), is_wp_error(), wp_basename(), pathinfo(), wp_read_image_metadata(), sanitize_title(), ->prepare_item_for_database(), wp_slash(), wp_insert_attachment(), sanitize_text_field(), update_post_meta(), is_wp_error(), ->get_error_code(), ->add_data() |
empty($request) && !empty($files) && !is_wp_error() && empty($attachment) && !empty($value) && !$alt | 123–145 | ->get_file_params(), ->get_headers(), ->upload_from_file(), is_wp_error(), wp_basename(), pathinfo(), wp_read_image_metadata(), ->prepare_item_for_database(), strrpos(), wp_basename(), wp_slash(), wp_insert_attachment(), is_wp_error(), get_post(), do_action() |
empty($request) && !empty($files) && !is_wp_error() && !empty($image_meta) && empty($attachment) && !$alt | 123–140 | ->get_file_params(), ->get_headers(), ->upload_from_file(), is_wp_error(), wp_basename(), pathinfo(), wp_read_image_metadata(), sanitize_title(), ->prepare_item_for_database(), wp_basename(), wp_slash(), wp_insert_attachment(), is_wp_error(), get_post(), do_action() |
!empty($request) && empty($files) && !is_wp_error() && empty($attachment) && $alt | 123–141 | ->get_file_params(), ->get_headers(), get_post(), ->get_body(), ->upload_from_data(), is_wp_error(), wp_basename(), pathinfo(), wp_read_image_metadata(), ->prepare_item_for_database(), wp_basename(), wp_slash(), wp_insert_attachment(), sanitize_text_field(), update_post_meta(), is_wp_error(), get_post(), do_action() |
empty($request) && empty($files) && !is_wp_error() && empty($attachment) && !empty($value) && !$alt | 124–146 | ->get_file_params(), ->get_headers(), ->get_body(), ->upload_from_data(), is_wp_error(), wp_basename(), pathinfo(), wp_read_image_metadata(), ->prepare_item_for_database(), strrpos(), wp_basename(), wp_slash(), wp_insert_attachment(), is_wp_error(), get_post(), do_action() |
empty($request) && empty($files) && !is_wp_error() && !empty($image_meta) && empty($attachment) && !$alt | 124–141 | ->get_file_params(), ->get_headers(), ->get_body(), ->upload_from_data(), is_wp_error(), wp_basename(), pathinfo(), wp_read_image_metadata(), sanitize_title(), ->prepare_item_for_database(), wp_basename(), wp_slash(), wp_insert_attachment(), is_wp_error(), get_post(), do_action() |
empty($request) && !empty($files) && !is_wp_error() && !empty($value) && $alt | 124–146 | ->get_file_params(), ->get_headers(), ->upload_from_file(), is_wp_error(), wp_basename(), pathinfo(), wp_read_image_metadata(), ->prepare_item_for_database(), strrpos(), wp_slash(), wp_insert_attachment(), sanitize_text_field(), update_post_meta(), is_wp_error(), get_post(), do_action() |
empty($request) && !empty($files) && !is_wp_error() && !empty($image_meta) && !empty($attachment) && $alt | 124–141 | ->get_file_params(), ->get_headers(), ->upload_from_file(), is_wp_error(), wp_basename(), pathinfo(), wp_read_image_metadata(), sanitize_title(), ->prepare_item_for_database(), wp_slash(), wp_insert_attachment(), sanitize_text_field(), update_post_meta(), is_wp_error(), get_post(), do_action() |
!empty($request) && empty($files) && !is_wp_error() && !empty($value) && !$alt | 124–141 | ->get_file_params(), ->get_headers(), get_post(), ->get_body(), ->upload_from_data(), is_wp_error(), wp_basename(), pathinfo(), wp_read_image_metadata(), ->prepare_item_for_database(), strrpos(), wp_slash(), wp_insert_attachment(), is_wp_error(), get_post(), do_action() |
empty($request) && empty($files) && !is_wp_error() && !empty($value) && $alt | 125–147 | ->get_file_params(), ->get_headers(), ->get_body(), ->upload_from_data(), is_wp_error(), wp_basename(), pathinfo(), wp_read_image_metadata(), ->prepare_item_for_database(), strrpos(), wp_slash(), wp_insert_attachment(), sanitize_text_field(), update_post_meta(), is_wp_error(), get_post(), do_action() |
empty($request) && empty($files) && !is_wp_error() && !empty($image_meta) && !empty($attachment) && $alt | 125–142 | ->get_file_params(), ->get_headers(), ->get_body(), ->upload_from_data(), is_wp_error(), wp_basename(), pathinfo(), wp_read_image_metadata(), sanitize_title(), ->prepare_item_for_database(), wp_slash(), wp_insert_attachment(), sanitize_text_field(), update_post_meta(), is_wp_error(), get_post(), do_action() |
empty($request) && !empty($files) && empty($attachment) && !empty($value) && $alt | 126–148 | ->get_file_params(), ->get_headers(), ->upload_from_file(), is_wp_error(), wp_basename(), pathinfo(), wp_read_image_metadata(), ->prepare_item_for_database(), strrpos(), wp_basename(), wp_slash(), wp_insert_attachment(), sanitize_text_field(), update_post_meta(), is_wp_error(), ->get_error_code(), ->add_data() |
empty($request) && !empty($files) && !empty($image_meta) && empty($attachment) && $alt | 126–143 | ->get_file_params(), ->get_headers(), ->upload_from_file(), is_wp_error(), wp_basename(), pathinfo(), wp_read_image_metadata(), sanitize_title(), ->prepare_item_for_database(), wp_basename(), wp_slash(), wp_insert_attachment(), sanitize_text_field(), update_post_meta(), is_wp_error(), ->get_error_code(), ->add_data() |
!empty($request) && empty($files) && empty($attachment) && !empty($value) && !$alt | 126–143 | ->get_file_params(), ->get_headers(), get_post(), ->get_body(), ->upload_from_data(), is_wp_error(), wp_basename(), pathinfo(), wp_read_image_metadata(), ->prepare_item_for_database(), strrpos(), wp_basename(), wp_slash(), wp_insert_attachment(), is_wp_error(), ->get_error_code(), ->add_data() |
empty($request) && !empty($files) && !empty($image_meta) && !empty($value) && !$alt | 127–143 | ->get_file_params(), ->get_headers(), ->upload_from_file(), is_wp_error(), wp_basename(), pathinfo(), wp_read_image_metadata(), sanitize_title(), ->prepare_item_for_database(), strrpos(), wp_slash(), wp_insert_attachment(), is_wp_error(), ->get_error_code(), ->add_data() |
empty($request) && empty($files) && empty($attachment) && !empty($value) && $alt | 127–149 | ->get_file_params(), ->get_headers(), ->get_body(), ->upload_from_data(), is_wp_error(), wp_basename(), pathinfo(), wp_read_image_metadata(), ->prepare_item_for_database(), strrpos(), wp_basename(), wp_slash(), wp_insert_attachment(), sanitize_text_field(), update_post_meta(), is_wp_error(), ->get_error_code(), ->add_data() |
empty($request) && empty($files) && !empty($image_meta) && empty($attachment) && $alt | 127–144 | ->get_file_params(), ->get_headers(), ->get_body(), ->upload_from_data(), is_wp_error(), wp_basename(), pathinfo(), wp_read_image_metadata(), sanitize_title(), ->prepare_item_for_database(), wp_basename(), wp_slash(), wp_insert_attachment(), sanitize_text_field(), update_post_meta(), is_wp_error(), ->get_error_code(), ->add_data() |
!empty($request) && empty($files) && !empty($value) && $alt | 127–144 | ->get_file_params(), ->get_headers(), get_post(), ->get_body(), ->upload_from_data(), is_wp_error(), wp_basename(), pathinfo(), wp_read_image_metadata(), ->prepare_item_for_database(), strrpos(), wp_slash(), wp_insert_attachment(), sanitize_text_field(), update_post_meta(), is_wp_error(), ->get_error_code(), ->add_data() |
empty($request) && empty($files) && !empty($image_meta) && !empty($value) && !$alt | 128–144 | ->get_file_params(), ->get_headers(), ->get_body(), ->upload_from_data(), is_wp_error(), wp_basename(), pathinfo(), wp_read_image_metadata(), sanitize_title(), ->prepare_item_for_database(), strrpos(), wp_slash(), wp_insert_attachment(), is_wp_error(), ->get_error_code(), ->add_data() |
empty($request) && !empty($files) && !is_wp_error() && empty($attachment) && !empty($value) && $alt | 131–153 | ->get_file_params(), ->get_headers(), ->upload_from_file(), is_wp_error(), wp_basename(), pathinfo(), wp_read_image_metadata(), ->prepare_item_for_database(), strrpos(), wp_basename(), wp_slash(), wp_insert_attachment(), sanitize_text_field(), update_post_meta(), is_wp_error(), get_post(), do_action() |
empty($request) && !empty($files) && !is_wp_error() && !empty($image_meta) && empty($attachment) && $alt | 131–148 | ->get_file_params(), ->get_headers(), ->upload_from_file(), is_wp_error(), wp_basename(), pathinfo(), wp_read_image_metadata(), sanitize_title(), ->prepare_item_for_database(), wp_basename(), wp_slash(), wp_insert_attachment(), sanitize_text_field(), update_post_meta(), is_wp_error(), get_post(), do_action() |
!empty($request) && empty($files) && !is_wp_error() && empty($attachment) && !empty($value) && !$alt | 131–148 | ->get_file_params(), ->get_headers(), get_post(), ->get_body(), ->upload_from_data(), is_wp_error(), wp_basename(), pathinfo(), wp_read_image_metadata(), ->prepare_item_for_database(), strrpos(), wp_basename(), wp_slash(), wp_insert_attachment(), is_wp_error(), get_post(), do_action() |
empty($request) && !empty($files) && !is_wp_error() && !empty($image_meta) && !empty($value) && !$alt | 132–148 | ->get_file_params(), ->get_headers(), ->upload_from_file(), is_wp_error(), wp_basename(), pathinfo(), wp_read_image_metadata(), sanitize_title(), ->prepare_item_for_database(), strrpos(), wp_slash(), wp_insert_attachment(), is_wp_error(), get_post(), do_action() |
empty($request) && empty($files) && !is_wp_error() && empty($attachment) && !empty($value) && $alt | 132–154 | ->get_file_params(), ->get_headers(), ->get_body(), ->upload_from_data(), is_wp_error(), wp_basename(), pathinfo(), wp_read_image_metadata(), ->prepare_item_for_database(), strrpos(), wp_basename(), wp_slash(), wp_insert_attachment(), sanitize_text_field(), update_post_meta(), is_wp_error(), get_post(), do_action() |
empty($request) && empty($files) && !is_wp_error() && !empty($image_meta) && empty($attachment) && $alt | 132–149 | ->get_file_params(), ->get_headers(), ->get_body(), ->upload_from_data(), is_wp_error(), wp_basename(), pathinfo(), wp_read_image_metadata(), sanitize_title(), ->prepare_item_for_database(), wp_basename(), wp_slash(), wp_insert_attachment(), sanitize_text_field(), update_post_meta(), is_wp_error(), get_post(), do_action() |
!empty($request) && empty($files) && !is_wp_error() && !empty($value) && $alt | 132–149 | ->get_file_params(), ->get_headers(), get_post(), ->get_body(), ->upload_from_data(), is_wp_error(), wp_basename(), pathinfo(), wp_read_image_metadata(), ->prepare_item_for_database(), strrpos(), wp_slash(), wp_insert_attachment(), sanitize_text_field(), update_post_meta(), is_wp_error(), get_post(), do_action() |
empty($request) && empty($files) && !is_wp_error() && !empty($image_meta) && !empty($value) && !$alt | 133–149 | ->get_file_params(), ->get_headers(), ->get_body(), ->upload_from_data(), is_wp_error(), wp_basename(), pathinfo(), wp_read_image_metadata(), sanitize_title(), ->prepare_item_for_database(), strrpos(), wp_slash(), wp_insert_attachment(), is_wp_error(), get_post(), do_action() |
empty($request) && !empty($files) && !empty($image_meta) && empty($attachment) && !empty($value) && !$alt | 134–150 | ->get_file_params(), ->get_headers(), ->upload_from_file(), is_wp_error(), wp_basename(), pathinfo(), wp_read_image_metadata(), sanitize_title(), ->prepare_item_for_database(), strrpos(), wp_basename(), wp_slash(), wp_insert_attachment(), is_wp_error(), ->get_error_code(), ->add_data() |
!empty($request) && empty($files) && empty($attachment) && !empty($value) && $alt | 134–151 | ->get_file_params(), ->get_headers(), get_post(), ->get_body(), ->upload_from_data(), is_wp_error(), wp_basename(), pathinfo(), wp_read_image_metadata(), ->prepare_item_for_database(), strrpos(), wp_basename(), wp_slash(), wp_insert_attachment(), sanitize_text_field(), update_post_meta(), is_wp_error(), ->get_error_code(), ->add_data() |
empty($request) && empty($files) && !empty($image_meta) && empty($attachment) && !empty($value) && !$alt | 135–151 | ->get_file_params(), ->get_headers(), ->get_body(), ->upload_from_data(), is_wp_error(), wp_basename(), pathinfo(), wp_read_image_metadata(), sanitize_title(), ->prepare_item_for_database(), strrpos(), wp_basename(), wp_slash(), wp_insert_attachment(), is_wp_error(), ->get_error_code(), ->add_data() |
empty($request) && !empty($files) && !empty($image_meta) && !empty($value) && $alt | 135–151 | ->get_file_params(), ->get_headers(), ->upload_from_file(), is_wp_error(), wp_basename(), pathinfo(), wp_read_image_metadata(), sanitize_title(), ->prepare_item_for_database(), strrpos(), wp_slash(), wp_insert_attachment(), sanitize_text_field(), update_post_meta(), is_wp_error(), ->get_error_code(), ->add_data() |
empty($request) && empty($files) && !empty($image_meta) && !empty($value) && $alt | 136–152 | ->get_file_params(), ->get_headers(), ->get_body(), ->upload_from_data(), is_wp_error(), wp_basename(), pathinfo(), wp_read_image_metadata(), sanitize_title(), ->prepare_item_for_database(), strrpos(), wp_slash(), wp_insert_attachment(), sanitize_text_field(), update_post_meta(), is_wp_error(), ->get_error_code(), ->add_data() |
empty($request) && !empty($files) && !is_wp_error() && !empty($image_meta) && empty($attachment) && !empty($value) && !$alt | 139–155 | ->get_file_params(), ->get_headers(), ->upload_from_file(), is_wp_error(), wp_basename(), pathinfo(), wp_read_image_metadata(), sanitize_title(), ->prepare_item_for_database(), strrpos(), wp_basename(), wp_slash(), wp_insert_attachment(), is_wp_error(), get_post(), do_action() |
!empty($request) && empty($files) && !is_wp_error() && empty($attachment) && !empty($value) && $alt | 139–156 | ->get_file_params(), ->get_headers(), get_post(), ->get_body(), ->upload_from_data(), is_wp_error(), wp_basename(), pathinfo(), wp_read_image_metadata(), ->prepare_item_for_database(), strrpos(), wp_basename(), wp_slash(), wp_insert_attachment(), sanitize_text_field(), update_post_meta(), is_wp_error(), get_post(), do_action() |
empty($request) && empty($files) && !is_wp_error() && !empty($image_meta) && empty($attachment) && !empty($value) && !$alt | 140–156 | ->get_file_params(), ->get_headers(), ->get_body(), ->upload_from_data(), is_wp_error(), wp_basename(), pathinfo(), wp_read_image_metadata(), sanitize_title(), ->prepare_item_for_database(), strrpos(), wp_basename(), wp_slash(), wp_insert_attachment(), is_wp_error(), get_post(), do_action() |
empty($request) && !empty($files) && !is_wp_error() && !empty($image_meta) && !empty($value) && $alt | 140–156 | ->get_file_params(), ->get_headers(), ->upload_from_file(), is_wp_error(), wp_basename(), pathinfo(), wp_read_image_metadata(), sanitize_title(), ->prepare_item_for_database(), strrpos(), wp_slash(), wp_insert_attachment(), sanitize_text_field(), update_post_meta(), is_wp_error(), get_post(), do_action() |
empty($request) && empty($files) && !is_wp_error() && !empty($image_meta) && !empty($value) && $alt | 141–157 | ->get_file_params(), ->get_headers(), ->get_body(), ->upload_from_data(), is_wp_error(), wp_basename(), pathinfo(), wp_read_image_metadata(), sanitize_title(), ->prepare_item_for_database(), strrpos(), wp_slash(), wp_insert_attachment(), sanitize_text_field(), update_post_meta(), is_wp_error(), get_post(), do_action() |
empty($request) && !empty($files) && !empty($image_meta) && empty($attachment) && !empty($value) && $alt | 142–158 | ->get_file_params(), ->get_headers(), ->upload_from_file(), is_wp_error(), wp_basename(), pathinfo(), wp_read_image_metadata(), sanitize_title(), ->prepare_item_for_database(), strrpos(), wp_basename(), wp_slash(), wp_insert_attachment(), sanitize_text_field(), update_post_meta(), is_wp_error(), ->get_error_code(), ->add_data() |
empty($request) && empty($files) && !empty($image_meta) && empty($attachment) && !empty($value) && $alt | 143–159 | ->get_file_params(), ->get_headers(), ->get_body(), ->upload_from_data(), is_wp_error(), wp_basename(), pathinfo(), wp_read_image_metadata(), sanitize_title(), ->prepare_item_for_database(), strrpos(), wp_basename(), wp_slash(), wp_insert_attachment(), sanitize_text_field(), update_post_meta(), is_wp_error(), ->get_error_code(), ->add_data() |
empty($request) && !empty($files) && !is_wp_error() && !empty($image_meta) && empty($attachment) && !empty($value) && $alt | 147–163 | ->get_file_params(), ->get_headers(), ->upload_from_file(), is_wp_error(), wp_basename(), pathinfo(), wp_read_image_metadata(), sanitize_title(), ->prepare_item_for_database(), strrpos(), wp_basename(), wp_slash(), wp_insert_attachment(), sanitize_text_field(), update_post_meta(), is_wp_error(), get_post(), do_action() |
empty($request) && empty($files) && !is_wp_error() && !empty($image_meta) && empty($attachment) && !empty($value) && $alt | 148–164 | ->get_file_params(), ->get_headers(), ->get_body(), ->upload_from_data(), is_wp_error(), wp_basename(), pathinfo(), wp_read_image_metadata(), sanitize_title(), ->prepare_item_for_database(), strrpos(), wp_basename(), wp_slash(), wp_insert_attachment(), sanitize_text_field(), update_post_meta(), is_wp_error(), get_post(), do_action() |
This body has more branch combinations than are worth enumerating, so the table covers the outcomes found first rather than every one that exists.
Across PHP versions
| PHP | Compiled | Executed | Branches | Notes |
|---|---|---|---|---|
| 8.6-dev | 201 | 24–164 | 21 | |
| 8.5 | 201 | 24–164 | 21 | |
| 8.4 | 201 | 24–164 | 21 | 24 fewer instructions than PHP 8.3 |
| 8.3 | 225 | 24–185 | 21 | |
| 8.2 | 225 | 24–185 | 21 | |
| 8.1 | 225 | 24–185 | 21 | |
| 7.4 | 225 | 24–185 | 21 |
An instruction is not a fixed amount of time, so a matching count is not necessarily the same speed; what it rules out is a difference in the work itself.
Hooks and filters fired · 1
One hook fires while WP_REST_Attachments_Controller::insert_attachment() runs, in this order:
- do_action( rest_insert_attachment )actionline 405 (+103 into the body)
Fires after a single attachment is created or updated via the REST API.
Uses · 13
- get_post()Retrieves post data given a post ID or post object.
- is_wp_error()Checks whether the given variable is a WordPress Error.
- wp_basename()i18n-friendly version of basename().
- wp_read_image_metadata()Gets extended image metadata, exif or iptc as available.
- sanitize_title()Sanitizes a string into a slug, which can be used in URLs or HTML attributes.
- wp_insert_attachment()Inserts an attachment.
- wp_slash()Adds slashes to a string or recursively adds slashes to strings within an array.
- update_post_meta()Updates a post meta field based on the given post ID.
- sanitize_text_field()Sanitizes a string from user input or from the database.
- do_action()Calls the callback functions that have been added to an action hook.
- WP_REST_Attachments_Controller::upload_from_file()Handles an upload via multipart/form-data ($_FILES).
- WP_REST_Attachments_Controller::upload_from_data()Handles an upload via raw POST data.
Show all 13
- WP_REST_Attachments_Controller::prepare_item_for_database()Prepares a single attachment for create or update.
Used by · 1
- WP_REST_Attachments_Controller::create_item()Creates a single attachment.
Source code
protected function insert_attachment( $request ) { // Get the file via $_FILES or raw data. $files = $request->get_file_params(); $headers = $request->get_headers(); $time = null; // Matches logic in media_handle_upload(). if ( ! empty( $request['post'] ) ) { $post = get_post( $request['post'] ); // The post date doesn't usually matter for pages, so don't backdate this upload. if ( $post && 'page' !== $post->post_type && substr( $post->post_date, 0, 4 ) > 0 ) { $time = $post->post_date; } } if ( ! empty( $files ) ) { $file = $this->upload_from_file( $files, $headers, $time ); } else { $file = $this->upload_from_data( $request->get_body(), $headers, $time ); } if ( is_wp_error( $file ) ) { return $file; } $name = wp_basename( $file['file'] ); $name_parts = pathinfo( $name ); $name = trim( substr( $name, 0, -( 1 + strlen( $name_parts['extension'] ) ) ) ); $url = $file['url']; $type = $file['type']; $file = $file['file']; $alt = ''; // Include image functions to get access to wp_read_image_metadata(). require_once ABSPATH . 'wp-admin/includes/image.php'; // Use image exif/iptc data for title and caption defaults if possible. $image_meta = wp_read_image_metadata( $file ); if ( ! empty( $image_meta ) ) { if ( empty( $request['title'] ) && trim( $image_meta['title'] ) && ! is_numeric( sanitize_title( $image_meta['title'] ) ) ) { $request['title'] = $image_meta['title']; } if ( empty( $request['caption'] ) && trim( $image_meta['caption'] ) ) { $request['caption'] = $image_meta['caption']; } if ( empty( $request['alt'] ) && trim( $image_meta['alt'] ) ) { $alt = $image_meta['alt']; } } $attachment = $this->prepare_item_for_database( $request ); $attachment->post_mime_type = $type; $attachment->guid = $url; // If the title was not set, use the original filename. if ( empty( $attachment->post_title ) && ! empty( $files['file']['name'] ) ) { // Remove the file extension (after the last `.`) $tmp_title = substr( $files['file']['name'], 0, strrpos( $files['file']['name'], '.' ) ); if ( ! empty( $tmp_title ) ) { $attachment->post_title = $tmp_title; } } // Fall back to the original approach. if ( empty( $attachment->post_title ) ) { $attachment->post_title = preg_replace( '/\.[^.]+$/', '', wp_basename( $file ) ); } // $post_parent is inherited from $attachment['post_parent']. $id = wp_insert_attachment( wp_slash( (array) $attachment ), $file, 0, true, false ); if ( trim( $alt ) ) { update_post_meta( $id, '_wp_attachment_image_alt', sanitize_text_field( $alt ) );Changelog
Introduced in 5.3.0. Unchanged from 6.7.7 through 7.1.0.
Signature, return type and hooks compared across 5 parsed releases.
About this page
- Parsed data
- Generated from the wordpress-develop 7.0.4 tag, from
src/wp-includes/rest-api/endpoints/class-wp-rest-attachments-controller.php, and regenerated for each WordPress release so it tracks the code rather than a snapshot of it. - Corrections
- Something wrong on this page? Report it and it gets fixed in the next regeneration.