/** * Evaluate custom field mapping data source * * @since 2.20 * * @param integer post->ID of attachment * @param string category/scope to evaluate against: custom_field_mapping or single_attachment_mapping * @param array data source specification ( name, *data_source, *keep_existing, *format, mla_column, quick_edit, bulk_edit, *meta_name, *option, no_null ) * @param array (optional) _wp_attachment_metadata, default NULL (use current postmeta database value) * * @return string|array data source value */ private static function _evaluate_data_source($post_id, $category, $data_value, $attachment_metadata = NULL) { global $wpdb; static $upload_dir, $intermediate_sizes = NULL, $wp_attached_files = NULL, $wp_attachment_metadata = NULL; static $current_id = 0, $file_info = NULL, $parent_info = NULL, $references = NULL, $alt_text = NULL; if ('none' == $data_value['data_source']) { return ''; } $data_source = $data_value['data_source']; /* * Do this once per page load; cache attachment metadata if mapping all attachments */ if (NULL == $intermediate_sizes) { $upload_dir = wp_upload_dir(); $upload_dir = $upload_dir['basedir'] . '/'; $intermediate_sizes = get_intermediate_image_sizes(); if ('custom_field_mapping' == $category) { if (!($table = _get_meta_table('post'))) { $wp_attached_files = array(); $wp_attachment_metadata = array(); } else { $wp_attachment_metadata = $wpdb->get_results("SELECT post_id, meta_value FROM {$table} WHERE meta_key = '_wp_attachment_metadata'", OBJECT_K); $wp_attached_files = $wpdb->get_results("SELECT post_id, meta_value FROM {$table} WHERE meta_key = '_wp_attached_file'", OBJECT_K); } } // custom_field_mapping, i.e., mapping all attachments } // first call after page load /* * Do this once per post. Simulate SQL results for $wp_attached_files and $wp_attachment_metadata. */ if ($current_id != $post_id) { $current_id = $post_id; $parent_info = NULL; $references = NULL; $alt_text = NULL; if ('single_attachment_mapping' == $category) { $metadata = get_metadata('post', $post_id, '_wp_attached_file'); if (isset($metadata[0])) { $wp_attached_files = array($post_id => (object) array('post_id' => $post_id, 'meta_value' => $metadata[0])); } else { $wp_attached_files = array(); } if (NULL == $attachment_metadata) { $metadata = get_metadata('post', $post_id, '_wp_attachment_metadata'); if (isset($metadata[0])) { $attachment_metadata = $metadata[0]; } } if (empty($attachment_metadata)) { $attachment_metadata = array(); } $wp_attachment_metadata = array($post_id => (object) array('post_id' => $post_id, 'meta_value' => serialize($attachment_metadata))); } $file_info = MLAData_Source::_evaluate_file_information($upload_dir, $wp_attached_files, $wp_attachment_metadata, $post_id); } $size_info = array('file' => '', 'width' => '', 'height' => ''); $match_count = preg_match('/(.+)\\[(.+)\\]/', $data_source, $matches); if (1 == $match_count) { $data_source = $matches[1] . '[size]'; if (isset($file_info['sizes'][$matches[2]])) { $size_info = $file_info['sizes'][$matches[2]]; } } $result = ''; switch ($data_source) { case 'meta': $attachment_metadata = isset($wp_attachment_metadata[$post_id]->meta_value) ? maybe_unserialize($wp_attachment_metadata[$post_id]->meta_value) : array(); $result = MLAData::mla_find_array_element($data_value['meta_name'], $attachment_metadata, $data_value['option'], $data_value['keep_existing']); break; case 'template': if (in_array($data_value['option'], array('single', 'export', 'array', 'multi'))) { $default_option = 'array'; } else { $default_option = 'text'; } /* * Go through the template and expand the non-prefixed elements * as Data Sources */ $item_values = array(); $placeholders = MLAData::mla_get_template_placeholders($data_value['meta_name'], $default_option); foreach ($placeholders as $key => $placeholder) { if (empty($placeholder['prefix'])) { $field_value = $data_value; $field_value['data_source'] = $placeholder['value']; $field_value['meta_name'] = ''; $field_value['option'] = $placeholder['option']; $field_value['format'] = $placeholder['format']; if (isset($placeholder['args'])) { $field_value['args'] = $placeholder['args']; } $field_value = MLAData_Source::_evaluate_data_source($post_id, $category, $field_value, $attachment_metadata); $item_values[$key] = MLAData::mla_apply_field_level_format($field_value, $placeholder); } // Data Source } // foreach placeholder /* * Now expand the template using the above Data Source values */ $template = '[+template:' . $data_value['meta_name'] . '+]'; $item_values = MLAData::mla_expand_field_level_parameters($template, NULL, $item_values, $post_id, $data_value['keep_existing'], $default_option); if ('array' == $default_option) { $result = MLAData::mla_parse_array_template($template, $item_values); $result = MLAData_Source::_evaluate_array_result($result, $data_value['option'], $data_value['keep_existing']); } else { $result = MLAData::mla_parse_template($template, $item_values); } break; case 'parent': $data_source = 'post_parent'; /* fallthru */ /* fallthru */ case 'ID': case 'post_id': case 'post_author': case 'post_parent': case 'menu_order': case 'comment_count': $result = absint(MLAData_Source::_evaluate_post_information($post_id, $category, $data_source)); break; case 'alt_text': if (NULL == $alt_text) { $metadata = get_metadata('post', $post_id, '_wp_attachment_image_alt'); if (is_array($metadata)) { if (count($metadata) == 1) { $alt_text = maybe_unserialize($metadata[0]); } else { $alt_text = array(); foreach ($metadata as $single_key => $single_value) { $alt_text[$single_key] = maybe_unserialize($single_value); } } } } if (!empty($alt_text)) { $result = MLAData_Source::_evaluate_array_result($alt_text, $data_value['option'], $data_value['keep_existing']); } break; case 'mime_type': $data_source = 'post_mime_type'; /* fallthru */ /* fallthru */ case 'post_date': case 'post_date_gmt': case 'post_content': case 'post_title': case 'post_excerpt': case 'post_status': case 'comment_status': case 'ping_status': case 'post_name': case 'post_modified': case 'post_modified_gmt': case 'post_content_filtered': case 'guid': case 'post_mime_type': $result = MLAData_Source::_evaluate_post_information($post_id, $category, $data_source); break; case 'absolute_path': case 'absolute_file_name': case 'base_file': case 'path': case 'file_name': case 'name_only': case 'extension': case 'width': case 'height': case 'orientation': case 'hwstring_small': case 'aperture': case 'credit': case 'camera': case 'caption': case 'created_timestamp': case 'copyright': case 'focal_length': case 'iso': case 'shutter_speed': case 'title': if (isset($file_info[$data_source])) { $result = $file_info[$data_source]; } break; case 'file_size': $filesize = @filesize($file_info['absolute_file_name_raw']); if (!(false === $filesize)) { $result = $filesize; } break; case 'upload_date': $result = MLAData_Source::_evaluate_post_information($post_id, $category, 'post_date'); break; case 'dimensions': $result = $file_info['width'] . 'x' . $file_info['height']; if ('x' == $result) { $result = ''; } break; case 'pixels': $result = absint((int) $file_info['width'] * (int) $file_info['height']); if (0 == $result) { $result = ''; } else { $result = (string) $result; } break; case 'size_keys': $result = array(); foreach ($file_info['sizes'] as $key => $value) { $result[] = $key; } $result = MLAData_Source::_evaluate_array_result($result, $data_value['option'], $data_value['keep_existing']); break; case 'size_names': $result = array(); foreach ($file_info['sizes'] as $key => $value) { $result[] = $value['file']; } $result = MLAData_Source::_evaluate_array_result($result, $data_value['option'], $data_value['keep_existing']); break; case 'size_bytes': $result = array(); foreach ($file_info['sizes'] as $key => $value) { $filesize = @filesize($file_info['absolute_path_raw'] . $value['file']); if (false === $filesize) { $result[] = '?'; } else { switch ($data_value['format']) { case 'commas': if (is_numeric($filesize)) { $filesize = number_format((double) $filesize); } break; default: // no change } // format $result[] = $filesize; } } $result = MLAData_Source::_evaluate_array_result($result, $data_value['option'], $data_value['keep_existing']); break; case 'size_pixels': $result = array(); foreach ($file_info['sizes'] as $key => $value) { $pixels = absint((int) $value['width'] * (int) $value['height']); switch ($data_value['format']) { case 'commas': if (is_numeric($pixels)) { $pixels = number_format((double) $pixels); } break; default: // no change } // format $result[] = $pixels; } $result = MLAData_Source::_evaluate_array_result($result, $data_value['option'], $data_value['keep_existing']); break; case 'size_dimensions': $result = array(); foreach ($file_info['sizes'] as $key => $value) { $result[] = $value['width'] . 'x' . $value['height']; } $result = MLAData_Source::_evaluate_array_result($result, $data_value['option'], $data_value['keep_existing']); break; case 'size_name[size]': $result = $size_info['file']; break; case 'size_bytes[size]': $result = @filesize($file_info['absolute_path_raw'] . $size_info['file']); if (false === $result) { $result = '?'; } break; case 'size_pixels[size]': $result = absint((int) $size_info['width'] * (int) $size_info['height']); break; case 'size_dimensions[size]': $result = $size_info['width'] . 'x' . $size_info['height']; if ('x' == $result) { $result = ''; } break; case 'parent_date': case 'parent_type': case 'parent_title': if (is_null($parent_info)) { $parent_info = MLAQuery::mla_fetch_attachment_parent_data(MLAData_Source::_evaluate_post_information($post_id, $category, 'post_parent')); } if (isset($parent_info[$data_source])) { $result = $parent_info[$data_source]; } break; case 'parent_issues': if (is_null($references)) { $references = MLAQuery::mla_fetch_attachment_references($post_id, MLAData_Source::_evaluate_post_information($post_id, $category, 'post_parent')); } if (!empty($references['parent_errors'])) { $result = $references['parent_errors']; /* * Remove (ORPHAN... */ $orphan_certain = '(' . __('ORPHAN', 'media-library-assistant') . ')'; $orphan_possible = '(' . __('ORPHAN', 'media-library-assistant') . '?)'; if (false !== strpos($result, $orphan_certain)) { $result = trim(substr($result, strlen($orphan_certain))); } elseif (false !== strpos($result, $orphan_possible)) { $result = trim(substr($result, strlen($orphan_possible))); } } break; case 'reference_issues': if (is_null($references)) { $references = MLAQuery::mla_fetch_attachment_references($post_id, MLAData_Source::_evaluate_post_information($post_id, $category, 'post_parent')); } if (!empty($references['parent_errors'])) { $result = $references['parent_errors']; } break; case 'featured_in': case 'featured_in_title': if (is_null($references)) { $references = MLAQuery::mla_fetch_attachment_references($post_id, MLAData_Source::_evaluate_post_information($post_id, $category, 'post_parent')); } if (!empty($references['features'])) { $result = array(); foreach ($references['features'] as $ID => $value) { if ('featured_in' == $data_source) { $result[] = sprintf('%1$s (%2$s %3$d)', $value->post_title, $value->post_type, $ID); } else { $result[] = $value->post_title; } } $result = MLAData_Source::_evaluate_array_result($result, $data_value['option'], $data_value['keep_existing']); } else { $result = ''; } break; case 'inserted_in': case 'inserted_in_title': if (is_null($references)) { $references = MLAQuery::mla_fetch_attachment_references($post_id, MLAData_Source::_evaluate_post_information($post_id, $category, 'post_parent')); } if (!empty($references['inserts'])) { $result = array(); foreach ($references['inserts'] as $base_file => $inserts) { foreach ($inserts as $value) { if ('inserted_in' == $data_source) { $result[] = sprintf('%1$s (%2$s %3$d)', $value->post_title, $value->post_type, $value->ID); } else { $result[] = $value->post_title; } } } ksort($result); $result = MLAData_Source::_evaluate_array_result($result, $data_value['option'], $data_value['keep_existing']); } else { $result = ''; } break; case 'gallery_in': case 'gallery_in_title': if (is_null($references)) { $references = MLAQuery::mla_fetch_attachment_references($post_id, MLAData_Source::_evaluate_post_information($post_id, $category, 'post_parent')); } if (!empty($references['galleries'])) { $result = array(); foreach ($references['galleries'] as $ID => $value) { if ('gallery_in' == $data_source) { $result[] = sprintf('%1$s (%2$s %3$d)', $value['post_title'], $value['post_type'], $ID); } else { $result[] = $value['post_title']; } } $result = MLAData_Source::_evaluate_array_result($result, $data_value['option'], $data_value['keep_existing']); } else { $result = ''; } break; case 'mla_gallery_in': case 'mla_gallery_in_title': if (is_null($references)) { $references = MLAQuery::mla_fetch_attachment_references($post_id, MLAData_Source::_evaluate_post_information($post_id, $category, 'post_parent')); } if (!empty($references['mla_galleries'])) { $result = array(); foreach ($references['mla_galleries'] as $ID => $value) { if ('mla_gallery_in' == $data_source) { $result[] = sprintf('%1$s (%2$s %3$d)', $value['post_title'], $value['post_type'], $ID); } else { $result[] = $value['post_title']; } } $result = MLAData_Source::_evaluate_array_result($result, $data_value['option'], $data_value['keep_existing']); } else { $result = ''; } break; default: $custom_value = apply_filters('mla_evaluate_custom_data_source', NULL, $post_id, $category, $data_value, $attachment_metadata); if (!is_null($custom_value)) { return $custom_value; } return ''; } // switch $data_source switch ($data_value['format']) { case 'raw': return $result; case 'commas': if (is_numeric($result)) { $result = str_pad(number_format((double) $result), 15, ' ', STR_PAD_LEFT); } break; case 'native': default: /* * Make some numeric values sortable as strings, make all value non-empty */ if (in_array($data_source, array('file_size', 'pixels', 'width', 'height'))) { $result = str_pad($result, 15, ' ', STR_PAD_LEFT); } elseif (empty($result)) { $result = ' '; } } // format return $result; }
/** * Renders the MLA Gallery in meta box on the Edit Media page. * Declared public because it is a callback function. * * @since 0.80 * * @param object current post * * @return void echoes the HTML markup for the meta box content */ public static function mla_mla_gallery_in_handler($post) { if (is_null(self::$mla_references)) { self::$mla_references = MLAQuery::mla_fetch_attachment_references($post->ID, $post->post_parent); } $galleries = ''; if (is_array(self::$mla_references)) { foreach (self::$mla_references['mla_galleries'] as $gallery_id => $gallery) { if ($gallery_id == $post->post_parent) { $parent = __('PARENT', 'media-library-assistant') . ' '; } else { $parent = ''; } $galleries .= sprintf('%1$s (%2$s %3$s), %4$s', $parent, $gallery['post_type'], $gallery_id, $gallery['post_title']) . "\n"; } // foreach $feature } $galleries = apply_filters('mla_mla_gallery_in_meta_box', array('galleries' => $galleries, 'rows' => 5, 'cols' => 80), self::$mla_references, $post); $html = '<label class="screen-reader-text" for="mla_mla_gallery_in">' . __('MLA Gallery in', 'media-library-assistant') . '</label><textarea class="readonly" id="mla_mla_gallery_in" rows="' . absint($galleries['rows']) . '" cols="' . absint($galleries['cols']) . '" readonly="readonly" name="mla_mla_gallery_in" >' . esc_textarea($galleries['galleries']) . "</textarea>\n"; echo apply_filters('mla_mla_gallery_in_meta_box_html', $html, $galleries, self::$mla_references, $post); }
/** * Update a single item; change the "post" data, taxonomy terms * and meta data for a single attachment * * @since 0.1 * * @param int The ID of the attachment to be updated * @param array Field name => value pairs * @param array Optional taxonomy term values, default null * @param array Optional taxonomy actions (add, remove, replace), default null * * @return array success/failure message and NULL content */ public static function mla_update_single_item($post_id, $new_data, $tax_input = NULL, $tax_actions = NULL) { $post_data = self::mla_get_attachment_by_id($post_id, false); if (!isset($post_data)) { return array('message' => __('ERROR', 'media-library-assistant') . ': ' . __('Could not retrieve Attachment.', 'media-library-assistant'), 'body' => ''); } $updates = apply_filters('mla_update_single_item', compact(array('new_data', 'tax_input', 'tax_actions')), $post_id, $post_data); $new_data = isset($updates['new_data']) ? $updates['new_data'] : array(); $tax_input = isset($updates['tax_input']) ? $updates['tax_input'] : NULL; $tax_actions = isset($updates['tax_actions']) ? $updates['tax_actions'] : NULL; $message = ''; $updates = array('ID' => $post_id); $new_data = stripslashes_deep($new_data); $new_meta = NULL; foreach ($new_data as $key => $value) { switch ($key) { case 'post_title': if ($value == $post_data[$key]) { break; } /* translators: 1: element name 2: old_value 3: new_value */ $message .= sprintf(__('Changing %1$s from "%2$s" to "%3$s"', 'media-library-assistant') . '<br>', __('Title', 'media-library-assistant'), esc_attr($post_data[$key]), esc_attr($value)); $updates[$key] = $value; break; case 'post_name': if ($value == $post_data[$key]) { break; } $value = sanitize_title($value); /* * Make sure new slug is unique */ $args = array('name' => $value, 'post_type' => 'attachment', 'post_status' => 'inherit', 'showposts' => 1); $my_posts = get_posts($args); if ($my_posts) { /* translators: 1: ERROR tag 2: old_value */ $message .= sprintf(__('%1$s: Could not change Name/Slug "%2$s"; name already exists', 'media-library-assistant') . '<br>', __('ERROR', 'media-library-assistant'), $value); } else { /* translators: 1: element name 2: old_value 3: new_value */ $message .= sprintf(__('Changing %1$s from "%2$s" to "%3$s"', 'media-library-assistant') . '<br>', __('Name/Slug', 'media-library-assistant'), esc_attr($post_data[$key]), esc_attr($value)); $updates[$key] = $value; } break; /* * bulk_image_alt requires a separate key because some attachment types * should not get a value, e.g., text or PDF documents */ /* * bulk_image_alt requires a separate key because some attachment types * should not get a value, e.g., text or PDF documents */ case 'bulk_image_alt': if ('image/' !== substr($post_data['post_mime_type'], 0, 6)) { break; } // fallthru // fallthru case 'image_alt': $key = 'mla_wp_attachment_image_alt'; if (!isset($post_data[$key])) { $post_data[$key] = NULL; } if ($value == $post_data[$key]) { break; } if (empty($value)) { if (delete_post_meta($post_id, '_wp_attachment_image_alt')) { /* translators: 1: old_value */ $message .= sprintf(__('Deleting ALT Text, was "%1$s"', 'media-library-assistant') . '<br>', esc_attr($post_data[$key])); } else { /* translators: 1: ERROR tag 2: old_value */ $message .= sprintf(__('%1$s: Could not delete ALT Text, remains "%2$s"', 'media-library-assistant') . '<br>', __('ERROR', 'media-library-assistant'), esc_attr($post_data[$key])); } } else { /* * ALT Text isn't supposed to have multiple values, but it happens. * Delete multiple values and start over. */ if (is_array($post_data[$key])) { delete_post_meta($post_id, '_wp_attachment_image_alt'); } if (update_post_meta($post_id, '_wp_attachment_image_alt', $value)) { /* translators: 1: element name 2: old_value 3: new_value */ $message .= sprintf(__('Changing %1$s from "%2$s" to "%3$s"', 'media-library-assistant') . '<br>', __('ALT Text', 'media-library-assistant'), esc_attr($post_data[$key]), esc_attr($value)); } else { /* translators: 1: ERROR tag 2: old_value 3: new_value */ $message .= sprintf(__('%1$s: Could not change ALT Text from "%2$s" to "%3$s"', 'media-library-assistant') . '<br>', __('ERROR', 'media-library-assistant'), esc_attr($post_data[$key]), esc_attr($value)); } } break; case 'post_excerpt': if ($value == $post_data[$key]) { break; } /* translators: 1: element name 2: old_value 3: new_value */ $message .= sprintf(__('Changing %1$s from "%2$s" to "%3$s"', 'media-library-assistant') . '<br>', __('Caption', 'media-library-assistant'), esc_attr($post_data[$key]), esc_attr($value)); $updates[$key] = $value; break; case 'post_content': if ($value == $post_data[$key]) { break; } /* translators: 1: element name 2: old_value 3: new_value */ $message .= sprintf(__('Changing %1$s from "%2$s" to "%3$s"', 'media-library-assistant') . '<br>', __('Description', 'media-library-assistant'), esc_textarea($post_data[$key]), esc_textarea($value)); $updates[$key] = $value; break; case 'post_parent': if ($value == $post_data[$key]) { break; } $value = absint($value); /* translators: 1: element name 2: old_value 3: new_value */ $message .= sprintf(__('Changing %1$s from "%2$s" to "%3$s"', 'media-library-assistant') . '<br>', __('Parent', 'media-library-assistant'), $post_data[$key], $value); $updates[$key] = $value; break; case 'menu_order': if ($value == $post_data[$key]) { break; } $value = absint($value); /* translators: 1: element name 2: old_value 3: new_value */ $message .= sprintf(__('Changing %1$s from "%2$s" to "%3$s"', 'media-library-assistant') . '<br>', __('Menu Order', 'media-library-assistant'), $post_data[$key], $value); $updates[$key] = $value; break; case 'post_author': if ($value == $post_data[$key]) { break; } $value = absint($value); $from_user = get_userdata($post_data[$key]); $to_user = get_userdata($value); /* translators: 1: element name 2: old_value 3: new_value */ $message .= sprintf(__('Changing %1$s from "%2$s" to "%3$s"', 'media-library-assistant') . '<br>', __('Author', 'media-library-assistant'), $from_user->display_name, $to_user->display_name); $updates[$key] = $value; break; case 'comment_status': if ($value == $post_data[$key]) { break; } /* translators: 1: element name 2: old_value 3: new_value */ $message .= sprintf(__('Changing %1$s from "%2$s" to "%3$s"', 'media-library-assistant') . '<br>', __('Comments', 'media-library-assistant'), esc_attr($post_data[$key]), esc_attr($value)); $updates[$key] = $value; break; case 'ping_status': if ($value == $post_data[$key]) { break; } /* translators: 1: element name 2: old_value 3: new_value */ $message .= sprintf(__('Changing %1$s from "%2$s" to "%3$s"', 'media-library-assistant') . '<br>', __('Pings', 'media-library-assistant'), esc_attr($post_data[$key]), esc_attr($value)); $updates[$key] = $value; break; case 'taxonomy_updates': $tax_input = $value['inputs']; $tax_actions = $value['actions']; break; case 'custom_updates': $new_meta = $value; break; default: // Ignore anything else } // switch $key } // foreach $new_data if (!empty($tax_input)) { foreach ($tax_input as $taxonomy => $tags) { if (!empty($tax_actions)) { $tax_action = $tax_actions[$taxonomy]; } else { $tax_action = 'replace'; } $taxonomy_obj = get_taxonomy($taxonomy); if (current_user_can($taxonomy_obj->cap->assign_terms)) { if (is_array($tags)) { // array of int = hierarchical, comma-delimited string = non-hierarchical. $tags = array_filter($tags); } switch ($tax_action) { case 'add': if (!empty($tags)) { $action_name = __('Adding', 'media-library-assistant'); $result = wp_set_post_terms($post_id, $tags, $taxonomy, true); } break; case 'remove': $action_name = __('Removing', 'media-library-assistant'); $tags = self::_remove_terms($post_id, $tags, $taxonomy_obj); $result = wp_set_post_terms($post_id, $tags, $taxonomy); if (empty($tags)) { $result = true; } break; case 'replace': $action_name = __('Replacing', 'media-library-assistant'); $result = wp_set_post_terms($post_id, $tags, $taxonomy); if (empty($tags)) { $result = true; } break; default: $action_name = __('Ignoring', 'media-library-assistant'); $result = NULL; // ignore anything else } /* * Definitive results check would use: * do_action( 'set_object_terms', $object_id, $terms, $tt_ids, $taxonomy, $append, $old_tt_ids ); * in /wp_includes/taxonomy.php function wp_set_object_terms() */ if (!empty($result)) { delete_transient(MLA_OPTION_PREFIX . 't_term_counts_' . $taxonomy); /* translators: 1: action_name, 2: taxonomy */ $message .= sprintf(__('%1$s "%2$s" terms', 'media-library-assistant') . '<br>', $action_name, $taxonomy); } } else { // current_user_can /* translators: 1: taxonomy */ $message .= sprintf(__('You cannot assign "%1$s" terms', 'media-library-assistant') . '<br>', $taxonomy); } } // foreach $tax_input } // ! empty $tax_input if (is_array($new_meta)) { $message .= self::mla_update_item_postmeta($post_id, $new_meta); } if (empty($message)) { return array('message' => sprintf(__('Item %1$d, no changes detected.', 'media-library-assistant'), $post_id), 'body' => ''); } else { // invalidate the cached item self::mla_get_attachment_by_id(-1); MLAQuery::mla_fetch_attachment_parent_data(-1); MLAQuery::mla_fetch_attachment_metadata(-1); MLAQuery::mla_fetch_attachment_references(-1, 0); // See if anything else has changed if (1 < count($updates)) { $result = wp_update_post($updates); } else { $result = $post_id; } do_action('mla_updated_single_item', $post_id, $result); if ($result) { /* translators: 1: post ID */ $final_message = sprintf(__('Item %1$d updated.', 'media-library-assistant'), $post_id); /* * Uncomment this for debugging. */ // $final_message .= '<br>' . $message; //error_log( 'DEBUG: mla_update_single_item message = ' . var_export( $message, true ), 0 ); return array('message' => $final_message, 'body' => ''); } else { return array('message' => sprintf(__('%1$s: Item %2$d update failed.', 'media-library-assistant'), __('ERROR', 'media-library-assistant'), $post_id), 'body' => ''); } } }