/** * Adds flat checklist taxonomy support to the Media Manager Modal Window. * Declared public because it is an action. * * @since 2.20 */ public static function mla_admin_init_action() { //error_log( 'DEBUG: MLA_Ajax::mla_admin_init_action() $_REQUEST = ' . var_export( $_REQUEST, true ), 0 ); /* * If there's no action variable, we have nothing more to do */ if (!isset($_POST['action'])) { return; } /* * For flat taxonomies that use the checklist meta box, substitute our own handler * for /wp-admin/includes/ajax-actions.php function _wp_ajax_add_hierarchical_term(). */ if (defined('DOING_AJAX') && DOING_AJAX && 'add-' == substr($_POST['action'], 0, 4)) { $key = substr($_POST['action'], 4); if (MLACore::mla_taxonomy_support($key, 'flat-checklist')) { self::_mla_ajax_add_flat_term($key); /* note: this function sends an Ajax response and then dies; no return */ } } add_action('wp_ajax_' . 'mla_find_posts', 'MLA_Ajax::mla_find_posts_ajax_action'); add_action('wp_ajax_' . MLACore::JAVASCRIPT_INLINE_EDIT_SLUG . '-set-parent', 'MLA_Ajax::mla_set_parent_ajax_action'); }
/** * Registers Attachment Categories and Attachment Tags custom taxonomies, adds taxonomy-related filters * * @since 0.1 * * @return void */ private static function _build_taxonomies() { if (MLACore::mla_taxonomy_support('attachment_category')) { $labels = array('name' => _x('Att. Categories', 'taxonomy_name_plural', 'media-library-assistant'), 'singular_name' => _x('Att. Category', 'taxonomy_name_singular', 'media-library-assistant'), 'search_items' => __('Search Att. Categories', 'media-library-assistant'), 'all_items' => __('All Att. Categories', 'media-library-assistant'), 'parent_item' => __('Parent Att. Category', 'media-library-assistant'), 'parent_item_colon' => __('Parent Att. Category', 'media-library-assistant') . ':', 'edit_item' => __('Edit Att. Category', 'media-library-assistant'), 'update_item' => __('Update Att. Category', 'media-library-assistant'), 'add_new_item' => sprintf(__('Add New %1$s', 'media-library-assistant'), __('Att. Category', 'media-library-assistant')), 'new_item_name' => __('New Att. Category Name', 'media-library-assistant'), 'menu_name' => __('Att. Category', 'media-library-assistant')); register_taxonomy('attachment_category', array('attachment'), array('hierarchical' => true, 'labels' => $labels, 'show_ui' => true, 'query_var' => true, 'rewrite' => true, 'update_count_callback' => '_update_generic_term_count')); } if (MLACore::mla_taxonomy_support('attachment_tag')) { $labels = array('name' => _x('Att. Tags', 'taxonomy_name_plural', 'media-library-assistant'), 'singular_name' => _x('Att. Tag', 'taxonomy_name_singular', 'media-library-assistant'), 'search_items' => __('Search Att. Tags', 'media-library-assistant'), 'all_items' => __('All Att. Tags', 'media-library-assistant'), 'parent_item' => __('Parent Att. Tag', 'media-library-assistant'), 'parent_item_colon' => __('Parent Att. Tag', 'media-library-assistant') . ':', 'edit_item' => __('Edit Att. Tag', 'media-library-assistant'), 'update_item' => __('Update Att. Tag', 'media-library-assistant'), 'add_new_item' => sprintf(__('Add New %1$s', 'media-library-assistant'), __('Att. Tag', 'media-library-assistant')), 'new_item_name' => __('New Att. Tag Name', 'media-library-assistant'), 'menu_name' => __('Att. Tag', 'media-library-assistant')); register_taxonomy('attachment_tag', array('attachment'), array('hierarchical' => false, 'labels' => $labels, 'show_ui' => true, 'update_count_callback' => '_update_post_term_count', 'query_var' => true, 'rewrite' => true, 'update_count_callback' => '_update_generic_term_count')); } MLACore::mla_initialize_tax_checked_on_top(); $taxonomies = get_taxonomies(array('show_ui' => true), 'names'); foreach ($taxonomies as $tax_name) { if (MLACore::mla_taxonomy_support($tax_name)) { register_taxonomy_for_object_type($tax_name, 'attachment'); add_filter("manage_edit-{$tax_name}_columns", 'MLAObjects::mla_taxonomy_get_columns_filter', 0x7fffffff, 1); // $columns add_filter("manage_{$tax_name}_custom_column", 'MLAObjects::mla_taxonomy_column_filter', 0x7fffffff, 3); // $place_holder, $column_name, $tag->term_id } // taxonomy support } // foreach }
/** * Registers meta boxes for the Edit Media screen. * Declared public because it is an action. * * @since 0.80 * * @param string type of the current post, e.g., 'attachment' (optional, default 'unknown') * @param object current post (optional, default (object) array ( 'ID' => 0 )) * * @return void */ public static function mla_add_meta_boxes_action($post_type = 'unknown', $post = NULL) { /* * Plugins call this action with varying numbers of arguments! */ if (NULL == $post) { $post = (object) array('ID' => 0); } if ('attachment' != $post_type) { return; } /* * Use the mla_checklist_meta_box callback function for MLA supported taxonomies */ global $wp_meta_boxes; $screen = convert_to_screen('attachment'); $page = $screen->id; if ('checked' == MLACore::mla_get_option(MLACoreOptions::MLA_EDIT_MEDIA_SEARCH_TAXONOMY)) { $taxonomies = get_taxonomies(array('show_ui' => true), 'objects'); foreach ($taxonomies as $key => $value) { if (MLACore::mla_taxonomy_support($key)) { if ($value->hierarchical) { foreach (array_keys($wp_meta_boxes[$page]) as $a_context) { foreach (array('high', 'sorted', 'core', 'default', 'low') as $a_priority) { if (isset($wp_meta_boxes[$page][$a_context][$a_priority][$key . 'div'])) { $box =& $wp_meta_boxes[$page][$a_context][$a_priority][$key . 'div']; if ('post_categories_meta_box' == $box['callback']) { $box['callback'] = 'MLACore::mla_checklist_meta_box'; } } // isset $box } // foreach priority } // foreach context } elseif (MLACore::mla_taxonomy_support($key, 'flat-checklist')) { foreach (array_keys($wp_meta_boxes[$page]) as $a_context) { foreach (array('high', 'sorted', 'core', 'default', 'low') as $a_priority) { if (isset($wp_meta_boxes[$page][$a_context][$a_priority]['tagsdiv-' . $key])) { $box =& $wp_meta_boxes[$page][$a_context][$a_priority]['tagsdiv-' . $key]; if ('post_tags_meta_box' == $box['callback']) { $box['callback'] = 'MLACore::mla_checklist_meta_box'; } } // isset $box } // foreach priority } // foreach context } // flat checklist } // is supported } // foreach } // MLA_EDIT_MEDIA_SEARCH_TAXONOMY if ('checked' == MLACore::mla_get_option(MLACoreOptions::MLA_EDIT_MEDIA_META_BOXES)) { $active_boxes = apply_filters('mla_edit_media_meta_boxes', array('mla-parent-info' => 'mla-parent-info', 'mla-menu-order' => 'mla-menu-order', 'mla-image-metadata' => 'mla-image-metadata', 'mla-featured-in' => 'mla-featured-in', 'mla-inserted-in' => 'mla-inserted-in', 'mla-gallery-in' => 'mla-gallery-in', 'mla-mla-gallery-in' => 'mla-mla-gallery-in')); if (isset($active_boxes['mla-parent-info'])) { add_meta_box('mla-parent-info', __('Parent Info', 'media-library-assistant'), 'MLAEdit::mla_parent_info_handler', 'attachment', 'normal', 'core'); } if (isset($active_boxes['mla-menu-order'])) { add_meta_box('mla-menu-order', __('Menu Order', 'media-library-assistant'), 'MLAEdit::mla_menu_order_handler', 'attachment', 'normal', 'core'); } if (isset($active_boxes['mla-image-metadata'])) { $image_metadata = get_metadata('post', $post->ID, '_wp_attachment_metadata', true); if (!empty($image_metadata)) { add_meta_box('mla-image-metadata', __('Attachment Metadata', 'media-library-assistant'), 'MLAEdit::mla_image_metadata_handler', 'attachment', 'normal', 'core'); } } if (isset($active_boxes['mla-featured-in']) && MLACore::$process_featured_in) { add_meta_box('mla-featured-in', __('Featured in', 'media-library-assistant'), 'MLAEdit::mla_featured_in_handler', 'attachment', 'normal', 'core'); } if (isset($active_boxes['mla-inserted-in']) && MLACore::$process_inserted_in) { add_meta_box('mla-inserted-in', __('Inserted in', 'media-library-assistant'), 'MLAEdit::mla_inserted_in_handler', 'attachment', 'normal', 'core'); } if (isset($active_boxes['mla-gallery-in']) && MLACore::$process_gallery_in) { add_meta_box('mla-gallery-in', __('Gallery in', 'media-library-assistant'), 'MLAEdit::mla_gallery_in_handler', 'attachment', 'normal', 'core'); } if (isset($active_boxes['mla-mla-gallery-in']) && MLACore::$process_mla_gallery_in) { add_meta_box('mla-mla-gallery-in', __('MLA Gallery in', 'media-library-assistant'), 'MLAEdit::mla_mla_gallery_in_handler', 'attachment', 'normal', 'core'); } } }
/** * Ajax handler for Media Manager "update compat-attachment-fields" queries * * Updates one (or more) supported taxonomy and returns updated checkbox or tag/term lists * * @since 2.20 * * @return void passes array of results to wp_send_json_success() for JSON encoding and transmission */ public static function mla_update_compat_fields_action() { global $post; if (empty($_REQUEST['id']) || !($post_id = absint($_REQUEST['id']))) { wp_send_json_error(); } if (empty($post)) { $post = get_post($post_id); // for filters and wp_popular_terms_checklist } do_action('mla_media_modal_begin_update_compat_fields', $post); $taxonomies = array(); $results = array(); foreach (get_taxonomies(array('show_ui' => true), 'objects') as $key => $value) { if (isset($_REQUEST[$key]) && MLACore::mla_taxonomy_support($key)) { $taxonomies[$key] = $value; if (!($use_checklist = $value->hierarchical)) { $use_checklist = MLACore::mla_taxonomy_support($key, 'flat-checklist'); } if ($value->hierarchical) { $terms = array_map('absint', preg_split('/,+/', $_REQUEST[$key])); } else { $terms = array_map('trim', preg_split('/,+/', $_REQUEST[$key])); } $terms = apply_filters('mla_media_modal_update_compat_fields_terms', $terms, $key, $value, $post_id); if (is_array($terms)) { wp_set_object_terms($post_id, $terms, $key, false); delete_transient(MLA_OPTION_PREFIX . 't_term_counts_' . $key); } if ($use_checklist) { ob_start(); $popular_ids = wp_popular_terms_checklist($key); $results[$key]["mla-{$key}-checklist-pop"] = ob_get_clean(); ob_start(); if ($value->hierarchical) { wp_terms_checklist($post_id, array('taxonomy' => $key, 'popular_cats' => $popular_ids)); } else { $checklist_walker = new MLA_Checklist_Walker(); wp_terms_checklist($post_id, array('taxonomy' => $key, 'popular_cats' => $popular_ids, 'walker' => $checklist_walker)); } $results[$key]["mla-{$key}-checklist"] = ob_get_clean(); } else { $terms = get_object_term_cache($post_id, $key); if (false === $terms) { $terms = wp_get_object_terms($post_id, $key); wp_cache_add($post_id, $terms, $key . '_relationships'); } if (is_wp_error($terms) || empty($terms)) { $terms = array(); } $list = array(); $object_terms = array(); foreach ($terms as $term) { $list[] = $term->name; $object_terms[$term->term_id] = $term->name; } // foreach $term sort($list); $hidden_list = join(',', $list); $results[$key]["object-terms"] = $object_terms; $results[$key]["mla-attachments-{$post_id}-{$key}"] = "\t\t<input name='attachments[{$post_id}][{$key}]' class='the-tags' id='mla-attachments-{$post_id}-{$key}' type='hidden' value='{$hidden_list}'>\n"; $results[$key]["mla-tags-{$post_id}-{$key}"] = "\t\t<input name='mla_tags[{$post_id}][{$key}]' class='server-tags' id='mla-tags-{$post_id}-{$key}' type='hidden' value='{$hidden_list}'>\n"; } } // set and supported } // foreach taxonomy wp_send_json_success(apply_filters('mla_media_modal_end_update_compat_fields', $results, $taxonomies, $post)); }
/** * Build the hidden form for the "Search Terms" popup modal window * * @since 1.90 * * @return string HTML <form> markup for hidden form */ public static function mla_terms_search_form() { $page_template_array = MLACore::mla_load_template('admin-terms-search-form.tpl'); if (!is_array($page_template_array)) { /* translators: 1: ERROR tag 2: function name 3: non-array value */ error_log(sprintf(_x('%1$s: %2$s non-array "%3$s"', 'error_log', 'media-library-assistant'), __('ERROR', 'media-library-assistant'), 'MLA::_build_terms_search_form', var_export($page_template_array, true)), 0); return ''; } $taxonomies = array(); foreach (get_object_taxonomies('attachment', 'objects') as $taxonomy) { if (MLACore::mla_taxonomy_support($taxonomy->name, 'support')) { $taxonomies[] = $taxonomy; } } if (empty($taxonomies)) { $page_values = array('Search Terms' => __('Search Terms', 'media-library-assistant'), 'message' => __('There are no taxonomies to search', 'media-library-assistant')); $terms_search_tpl = MLAData::mla_parse_template($page_template_array['mla-terms-search-empty-div'], $page_values); } else { $taxonomy_list = ''; foreach ($taxonomies as $taxonomy) { $page_values = array('taxonomy_checked' => MLACore::mla_taxonomy_support($taxonomy->name, 'term-search') ? 'checked="checked"' : '', 'taxonomy_slug' => $taxonomy->name, 'taxonomy_label' => esc_attr($taxonomy->label)); $taxonomy_list .= MLAData::mla_parse_template($page_template_array['mla-terms-search-taxonomy'], $page_values); } $page_values = array('Search Terms' => __('Search Terms', 'media-library-assistant'), 'Search' => __('Search', 'media-library-assistant'), 'phrases_and_checked' => 'checked="checked"', 'All phrases' => __('All phrases', 'media-library-assistant'), 'phrases_or_checked' => '', 'Any phrase' => __('Any phrase', 'media-library-assistant'), 'terms_and_checked' => '', 'All terms' => __('All terms', 'media-library-assistant'), 'terms_or_checked' => 'checked="checked"', 'Any term' => __('Any term', 'media-library-assistant'), 'exact_checked' => '', 'Exact' => __('Exact', 'media-library-assistant'), 'mla_terms_search_taxonomies' => $taxonomy_list); $terms_search_tpl = MLAData::mla_parse_template($page_template_array['mla-terms-search-div'], $page_values); } $page_values = array('mla_terms_search_url' => esc_url(add_query_arg(array_merge(MLA_List_Table::mla_submenu_arguments(false), array('page' => MLACore::ADMIN_PAGE_SLUG)), admin_url('upload.php'))), 'mla_terms_search_action' => MLA::MLA_ADMIN_TERMS_SEARCH, 'wpnonce' => wp_nonce_field(MLACore::MLA_ADMIN_NONCE_ACTION, MLACore::MLA_ADMIN_NONCE_NAME, true, false), 'mla_terms_search_div' => $terms_search_tpl); $terms_search_tpl = MLAData::mla_parse_template($page_template_array['mla-terms-search-form'], $page_values); return $terms_search_tpl; }
/** * Sanitize and expand query arguments from request variables * * Prepare the arguments for WP_Query. * Modeled after wp_edit_attachments_query in wp-admin/post.php * * @since 0.1 * * @param array query parameters from web page, usually found in $_REQUEST * @param int Optional number of rows (default 0) to skip over to reach desired page * @param int Optional number of rows on each page (0 = all rows, default) * * @return array revised arguments suitable for WP_Query */ private static function _prepare_list_table_query($raw_request, $offset = 0, $count = 0) { /* * Go through the $raw_request, take only the arguments that are used in the query and * sanitize or validate them. */ if (!is_array($raw_request)) { /* translators: 1: ERROR tag 2: function name 3: non-array value */ error_log(sprintf(_x('%1$s: %2$s non-array "%3$s"', 'error_log', 'media-library-assistant'), __('ERROR', 'media-library-assistant'), 'MLAQuery::_prepare_list_table_query', var_export($raw_request, true)), 0); return NULL; } /* * Make sure the current orderby choice still exists or revert to default. */ $default_orderby = array_merge(array('none' => array('none', false)), self::mla_get_sortable_columns()); $current_orderby = MLACore::mla_get_option(MLACore::MLA_DEFAULT_ORDERBY); $found_current = false; foreach ($default_orderby as $key => $value) { if ($current_orderby == $value[0]) { $found_current = true; break; } } if ($found_current) { /* * Custom fields can have HTML reserved characters, which are encoded by * mla_get_sortable_columns, so a separate, unencoded list is required. */ $default_orderby = MLACore::mla_custom_field_support('custom_sortable_columns'); foreach ($default_orderby as $sort_key => $sort_value) { if ($current_orderby == $sort_key) { $current_orderby = 'c_' . $sort_value[0]; break; } } // foreach } else { MLACore::mla_delete_option(MLACore::MLA_DEFAULT_ORDERBY); $current_orderby = MLACore::mla_get_option(MLACore::MLA_DEFAULT_ORDERBY); } $clean_request = array('m' => 0, 'orderby' => $current_orderby, 'order' => MLACore::mla_get_option(MLACore::MLA_DEFAULT_ORDER), 'post_type' => 'attachment', 'post_status' => 'inherit', 'mla_search_connector' => 'AND', 'mla_search_fields' => array()); foreach ($raw_request as $key => $value) { switch ($key) { /* * 'sentence' and 'exact' modify the keyword search ('s') * Their value is not important, only their presence. */ case 'sentence': case 'exact': case 'mla-tax': case 'mla-term': $clean_request[$key] = sanitize_key($value); break; case 'orderby': if (in_array($value, array('none', 'post__in'))) { $clean_request[$key] = $value; } else { $orderby = NULL; /* * Custom fields can have HTML reserved characters, which are encoded by * mla_get_sortable_columns, so a separate, unencoded list is required. */ $sortable_columns = MLACore::mla_custom_field_support('custom_sortable_columns'); foreach ($sortable_columns as $sort_key => $sort_value) { if ($value == $sort_key) { $orderby = 'c_' . $sort_value[0]; break; } } // foreach if (NULL === $orderby) { $sortable_columns = MLAQuery::mla_get_sortable_columns(); foreach ($sortable_columns as $sort_key => $sort_value) { if ($value == $sort_value[0]) { $orderby = $value; break; } } // foreach } if (NULL !== $orderby) { $clean_request[$key] = $orderby; } } break; /* * ids allows hooks to supply a persistent list of items */ /* * ids allows hooks to supply a persistent list of items */ case 'ids': if (is_array($value)) { $clean_request['post__in'] = $value; } else { $clean_request['post__in'] = array_map('absint', explode(',', $value)); } break; /* * post__in and post__not_in are used in the Media Modal Ajax queries */ /* * post__in and post__not_in are used in the Media Modal Ajax queries */ case 'post__in': case 'post__not_in': case 'post_mime_type': $clean_request[$key] = $value; break; case 'parent': case 'post_parent': $clean_request['post_parent'] = absint($value); break; /* * ['m'] - filter by year and month of post, e.g., 201204 */ /* * ['m'] - filter by year and month of post, e.g., 201204 */ case 'author': case 'm': $clean_request[$key] = absint($value); break; /* * ['mla_filter_term'] - filter by category or tag ID; -1 allowed */ /* * ['mla_filter_term'] - filter by category or tag ID; -1 allowed */ case 'mla_filter_term': $clean_request[$key] = intval($value); break; case 'order': switch ($value = strtoupper($value)) { case 'ASC': case 'DESC': $clean_request[$key] = $value; break; default: $clean_request[$key] = 'ASC'; } break; case 'detached': if ('0' == $value || '1' == $value) { $clean_request['detached'] = $value; } break; case 'status': if ('trash' == $value) { $clean_request['post_status'] = 'trash'; } break; /* * ['s'] - Search Media by one or more keywords * ['mla_search_connector'], ['mla_search_fields'] - Search Media options */ /* * ['s'] - Search Media by one or more keywords * ['mla_search_connector'], ['mla_search_fields'] - Search Media options */ case 's': switch (substr($value, 0, 3)) { case '>|<': $clean_request['debug'] = 'console'; break; case '<|>': $clean_request['debug'] = 'log'; break; } if (isset($clean_request['debug'])) { $value = substr($value, 3); } $value = stripslashes(trim($value)); if (!empty($value)) { $clean_request[$key] = $value; } break; case 'mla_terms_search': if (!empty($value['phrases']) && !empty($value['taxonomies'])) { $value['phrases'] = stripslashes(trim($value['phrases'])); if (!empty($value['phrases'])) { $clean_request[$key] = $value; } } break; case 'mla_search_connector': case 'mla_search_fields': $clean_request[$key] = $value; break; case 'mla-metakey': case 'mla-metavalue': $clean_request[$key] = stripslashes($value); break; case 'meta_query': if (!empty($value)) { if (is_array($value)) { $clean_request[$key] = $value; } else { $clean_request[$key] = unserialize(stripslashes($value)); unset($clean_request[$key]['slug']); } // not array } break; default: // ignore anything else in $_REQUEST } // switch $key } // foreach $raw_request /* * Pass query and search parameters to the filters for _execute_list_table_query */ self::$query_parameters = array('use_alt_text_view' => false, 'use_postmeta_view' => false, 'use_orderby_view' => false, 'orderby' => $clean_request['orderby'], 'order' => $clean_request['order']); self::$query_parameters['detached'] = isset($clean_request['detached']) ? $clean_request['detached'] : NULL; self::$search_parameters = array('debug' => 'none'); /* * Matching a meta_value to NULL requires a LEFT JOIN to a view and a special WHERE clause * Matching a wildcard pattern requires mainpulating the WHERE clause, too */ if (isset($clean_request['meta_query']['key'])) { self::$query_parameters['use_postmeta_view'] = true; self::$query_parameters['postmeta_key'] = $clean_request['meta_query']['key']; self::$query_parameters['postmeta_value'] = NULL; unset($clean_request['meta_query']); } elseif (isset($clean_request['meta_query']['patterns'])) { self::$query_parameters['patterns'] = $clean_request['meta_query']['patterns']; unset($clean_request['meta_query']['patterns']); } if (isset($clean_request['debug'])) { self::$query_parameters['debug'] = $clean_request['debug']; self::$search_parameters['debug'] = $clean_request['debug']; MLACore::mla_debug_mode($clean_request['debug']); unset($clean_request['debug']); } /* * We must patch the WHERE clause if there are leading spaces in the meta_value */ if (isset($clean_request['mla-metavalue']) && 0 < strlen($clean_request['mla-metavalue']) && ' ' == $clean_request['mla-metavalue'][0]) { self::$query_parameters['mla-metavalue'] = $clean_request['mla-metavalue']; } /* * We will handle "Terms Search" in the mla_query_posts_search_filter. */ if (isset($clean_request['mla_terms_search'])) { self::$search_parameters['mla_terms_search'] = $clean_request['mla_terms_search']; /* * The Terms Search overrides any terms-based keyword search for now; too complicated. */ if (isset($clean_request['mla_search_fields'])) { foreach ($clean_request['mla_search_fields'] as $index => $field) { if ('terms' == $field) { unset($clean_request['mla_search_fields'][$index]); } } } } /* * We will handle keyword search in the mla_query_posts_search_filter. */ if (isset($clean_request['s'])) { self::$search_parameters['s'] = $clean_request['s']; self::$search_parameters['mla_search_fields'] = apply_filters('mla_list_table_search_filter_fields', $clean_request['mla_search_fields'], array('content', 'title', 'excerpt', 'alt-text', 'name', 'terms')); self::$search_parameters['mla_search_connector'] = $clean_request['mla_search_connector']; self::$search_parameters['sentence'] = isset($clean_request['sentence']); self::$search_parameters['exact'] = isset($clean_request['exact']); if (in_array('alt-text', self::$search_parameters['mla_search_fields'])) { self::$query_parameters['use_alt_text_view'] = true; } if (in_array('terms', self::$search_parameters['mla_search_fields'])) { self::$search_parameters['mla_search_taxonomies'] = MLACore::mla_supported_taxonomies('term-search'); } unset($clean_request['s']); unset($clean_request['mla_search_connector']); unset($clean_request['mla_search_fields']); unset($clean_request['sentence']); unset($clean_request['exact']); } /* * We have to handle custom field/post_meta values here * because they need a JOIN clause supplied by WP_Query */ if ('c_' == substr($clean_request['orderby'], 0, 2)) { $option_value = MLAQuery::mla_custom_field_option_value($clean_request['orderby']); if (isset($option_value['name'])) { self::$query_parameters['use_orderby_view'] = true; self::$query_parameters['postmeta_key'] = $option_value['name']; if (isset($clean_request['orderby'])) { unset($clean_request['orderby']); } if (isset($clean_request['order'])) { unset($clean_request['order']); } } } else { // custom field switch (self::$query_parameters['orderby']) { /* * '_wp_attachment_image_alt' is special; it can have NULL values, * so we'll handle it in the JOIN and ORDERBY filters */ case '_wp_attachment_image_alt': self::$query_parameters['use_orderby_view'] = true; self::$query_parameters['postmeta_key'] = '_wp_attachment_image_alt'; if (isset($clean_request['orderby'])) { unset($clean_request['orderby']); } if (isset($clean_request['order'])) { unset($clean_request['order']); } break; case '_wp_attached_file': $clean_request['meta_key'] = '_wp_attached_file'; $clean_request['orderby'] = 'meta_value'; $clean_request['order'] = self::$query_parameters['order']; break; } // switch $orderby } /* * Ignore incoming paged value; use offset and count instead */ if ((int) $count > 0) { $clean_request['offset'] = $offset; $clean_request['posts_per_page'] = $count; } elseif ((int) $count == -1) { $clean_request['posts_per_page'] = $count; } /* * ['mla_filter_term'] - filter by taxonomy * * cat = 0 is "All Categories", i.e., no filtering * cat = -1 is "No Categories" */ if (isset($clean_request['mla_filter_term'])) { if ($clean_request['mla_filter_term'] != 0) { $tax_filter = MLACore::mla_taxonomy_support('', 'filter'); if ($clean_request['mla_filter_term'] == -1) { $term_list = get_terms($tax_filter, array('fields' => 'ids', 'hide_empty' => false)); $clean_request['tax_query'] = array(array('taxonomy' => $tax_filter, 'field' => 'id', 'terms' => $term_list, 'operator' => 'NOT IN')); } else { // mla_filter_term == -1 $clean_request['tax_query'] = array(array('taxonomy' => $tax_filter, 'field' => 'id', 'terms' => array((int) $clean_request['mla_filter_term']), 'include_children' => 'checked' == MLACore::mla_get_option(MLACore::MLA_TAXONOMY_FILTER_INCLUDE_CHILDREN))); } // mla_filter_term != -1 } // mla_filter_term != 0 unset($clean_request['mla_filter_term']); } // isset mla_filter_term if (isset($clean_request['mla-tax']) && isset($clean_request['mla-term'])) { $clean_request['tax_query'] = array(array('taxonomy' => $clean_request['mla-tax'], 'field' => 'slug', 'terms' => $clean_request['mla-term'], 'include_children' => false)); unset($clean_request['mla-tax']); unset($clean_request['mla-term']); } // isset mla_tax if (isset($clean_request['mla-metakey']) && isset($clean_request['mla-metavalue'])) { $clean_request['meta_key'] = $clean_request['mla-metakey']; $clean_request['meta_value'] = $clean_request['mla-metavalue']; unset($clean_request['mla-metakey']); unset($clean_request['mla-metavalue']); } // isset mla_tax return $clean_request; }
/** * Manages the creation of new taxonomy terms from metadata values * * @since 2.20 * * @param mixed string or array value returned by the rule * @param string field name or taxonomy name * @param integer post ID to be evaluated * @param string category/scope to evaluate against: iptc_exif_standard_mapping, iptc_exif_taxonomy_mapping or iptc_exif_custom_mapping * @param array attachment_metadata, default NULL * * @return array updated rule EXIF/Template value */ public static function mla_mapping_new_text($new_text, $setting_key, $post_id, $category, $attachment_metadata) { global $polylang; static $replicate = NULL, $current_language, $taxonomies, $other_languages, $parent_term; if ('iptc_exif_taxonomy_mapping' !== $category) { return $new_text; } if (is_null($replicate)) { $replicate = 'checked' == MLACore::mla_get_option('term_mapping_replication', false, false, MLA_Polylang::$mla_language_option_definitions); //error_log( __LINE__ . ' MLA_Polylang::mla_mapping_new_text $replicate = ' . var_export( $replicate, true ), 0 ); if ($polylang->curlang) { $current_language = $polylang->curlang->slug; } else { $current_language = pll_default_language(); } //error_log( __LINE__ . ' MLA_Polylang::mla_mapping_new_text $current_language = ' . var_export( $current_language, true ), 0 ); $taxonomies = array(); foreach ($polylang->model->get_translated_taxonomies() as $taxonomy) { if (MLACore::mla_taxonomy_support($taxonomy, 'support')) { $taxonomies[$taxonomy] = $taxonomy; } } //error_log( __LINE__ . ' MLA_Polylang::mla_mapping_new_text $category = ' . var_export( $category, true ), 0 ); //error_log( __LINE__ . ' MLA_Polylang::mla_mapping_new_text $taxonomies = ' . var_export( $taxonomies, true ), 0 ); $other_languages = array(); foreach ($polylang->model->get_languages_list() as $item_language) { if ($current_language !== $item_language->slug) { $other_languages[$item_language->slug] = $item_language; } } //error_log( __LINE__ . ' MLA_Polylang::mla_mapping_new_text $other_languages = ' . var_export( $other_languages, true ), 0 ); } if (!empty($new_text) && in_array($setting_key, $taxonomies)) { //error_log( __LINE__ . ' MLA_Polylang::mla_mapping_new_text mapping rule = ' . var_export( self::$current_mapping_rule, true ), 0 ); //error_log( __LINE__ . ' MLA_Polylang::mla_mapping_new_text $new_text = ' . var_export( $new_text, true ), 0 ); //error_log( __LINE__ . ' MLA_Polylang::mla_mapping_new_text $setting_key = ' . var_export( $setting_key, true ), 0 ); //error_log( __LINE__ . ' MLA_Polylang::mla_mapping_new_text $post_id = ' . var_export( $post_id, true ), 0 ); //error_log( __LINE__ . ' MLA_Polylang::mla_mapping_new_text $attachment_metadata = ' . var_export( $attachment_metadata, true ), 0 ); $language_details = $polylang->model->get_post_language($post_id); $item_language = $language_details->slug; //error_log( __LINE__ . ' MLA_Polylang::mla_mapping_new_text $language_details = ' . var_export( $language_details, true ), 0 ); /* * Find the parent term and its translations */ if (isset(self::$current_mapping_rule['parent'])) { if ($parent_term = absint(self::$current_mapping_rule['parent'])) { $parent_term = self::_get_relevant_term('id', $parent_term, $setting_key); } } else { $parent_term = 0; } //error_log( __LINE__ . ' MLA_Polylang::mla_mapping_new_text $parent_term = ' . var_export( $parent_term, true ), 0 ); $new_terms = array(); foreach ($new_text as $new_name) { $relevant_term = self::_get_relevant_term('name', $new_name, $setting_key); //error_log( __LINE__ . ' MLA_Polylang::mla_mapping_new_text $relevant_term = ' . var_export( $relevant_term, true ), 0 ); if ($relevant_term) { if (isset($relevant_term['translations'][$item_language])) { $new_terms[] = absint($relevant_term['translations'][$item_language]->element_id); } } else { /* * Always create the new term in the current language */ if ($parent_term && isset($parent_term['translations'][$current_language])) { $parent = $parent_term['translations'][$current_language]->element_id; } else { $parent = 0; } //error_log( __LINE__ . ' MLA_Polylang::mla_mapping_new_text $parent = ' . var_export( $parent, true ), 0 ); $res = wp_insert_term($new_name, $setting_key, array('parent' => $parent)); //error_log( __LINE__ . ' MLA_Polylang::mla_mapping_new_text $res = ' . var_export( $res, true ), 0 ); if (!is_wp_error($res) && isset($res['term_id'])) { $polylang->model->set_term_language($res['term_id'], $current_language); } /* * Add translations in the other languages? */ if ($replicate) { $source_term = $res['term_id']; $translations = array(); foreach ($other_languages as $language => $language_details) { if ($parent_term && isset($parent_term['translations'][$language])) { $parent = $parent_term['translations'][$language]->element_id; } else { $parent = 0; } //error_log( __LINE__ . ' MLA_Polylang::mla_mapping_new_text $parent = ' . var_export( $parent, true ), 0 ); // save_language() does a check_admin_referer() security test $_REQUEST['_pll_nonce'] = wp_create_nonce('pll_language'); $_POST['term_lang_choice'] = $language; $_POST['action'] = 'mla'; $res = wp_insert_term($new_name, $setting_key, array('parent' => $parent)); //error_log( __LINE__ . ' MLA_Polylang::mla_mapping_new_text $res = ' . var_export( $res, true ), 0 ); if (!is_wp_error($res) && isset($res['term_id'])) { $polylang->model->set_term_language($res['term_id'], $language); $translations[$language] = $res['term_id']; } } unset($_POST['term_lang_choice']); unset($_POST['action']); if (!empty($translations)) { $polylang->model->save_translations('term', $source_term, $translations); } } // replicate /* * Reload the term with all of its new translations */ $relevant_term = self::_get_relevant_term('name', $new_name, $setting_key); //error_log( __LINE__ . ' MLA_Polylang::mla_mapping_new_text $relevant_term = ' . var_export( $relevant_term, true ), 0 ); if (isset($relevant_term['translations'][$item_language])) { $new_terms[] = absint($relevant_term['translations'][$item_language]->element_id); } } // new term } // foreach new_name MLACore::mla_debug_add(__LINE__ . " MLA_Polylang::mla_mapping_new_text( {$setting_key}, {$post_id} ) \$new_terms = " . var_export($new_terms, true), MLACore::MLA_DEBUG_CATEGORY_AJAX); return $new_terms; } // translated taxonomy return $new_text; }
/** * Render and manage iptc/exif support options * * @since 1.00 * @uses $mla_option_templates contains row and table templates * * @param string 'render', 'update', 'delete', or 'reset' * @param string option name, e.g., 'iptc_exif_mapping' * @param array option parameters * @param array Optional. null (default) for 'render' else option data, e.g., $_REQUEST * * @return string HTML table row markup for 'render' else message(s) reflecting the results of the operation. */ public static function mla_iptc_exif_option_handler($action, $key, $value, $args = NULL) { $current_values = MLACore::mla_get_option('iptc_exif_mapping'); switch ($action) { case 'render': switch ($key) { case 'iptc_exif_standard_mapping': $row_template = MLAOptions::$mla_option_templates['iptc-exif-standard-row']; $table_rows = ''; foreach ($current_values['standard'] as $row_name => $row_value) { $row_values = array('key' => esc_attr($row_name), 'name_attr' => esc_attr($row_value['name']), 'name' => esc_html($row_value['name']), 'iptc_field_options' => MLAOptions::_compose_iptc_option_list($row_value['iptc_value']), 'exif_size' => MLACoreOptions::MLA_EXIF_SIZE, 'exif_text' => esc_attr($row_value['exif_value']), 'iptc_selected' => '', 'IPTC' => __('IPTC', 'media-library-assistant'), 'exif_selected' => '', 'EXIF' => __('EXIF', 'media-library-assistant'), 'keep_selected' => '', 'Keep' => __('Keep', 'media-library-assistant'), 'replace_selected' => '', 'Replace' => __('Replace', 'media-library-assistant')); if ($row_value['iptc_first']) { $row_values['iptc_selected'] = 'selected="selected"'; } else { $row_values['exif_selected'] = 'selected="selected"'; } if ($row_value['keep_existing']) { $row_values['keep_selected'] = 'selected="selected"'; } else { $row_values['replace_selected'] = 'selected="selected"'; } $table_rows .= MLAData::mla_parse_template($row_template, $row_values); } // foreach row $option_values = array('Field Title' => __('Field Title', 'media-library-assistant'), 'IPTC Value' => __('IPTC Value', 'media-library-assistant'), 'EXIF/Template Value' => __('EXIF/Template Value', 'media-library-assistant'), 'Priority' => __('Priority', 'media-library-assistant'), 'Existing Text' => __('Existing Text', 'media-library-assistant'), 'table_rows' => $table_rows, 'help' => $value['help']); return MLAData::mla_parse_template(MLAOptions::$mla_option_templates['iptc-exif-standard-table'], $option_values); case 'iptc_exif_taxonomy_mapping': $row_template = MLAOptions::$mla_option_templates['iptc-exif-taxonomy-row']; $select_template = MLAOptions::$mla_option_templates['iptc-exif-select']; $table_rows = ''; $taxonomies = get_taxonomies(array('show_ui' => true), 'objects'); foreach ($taxonomies as $row_name => $row_value) { if (!MLACore::mla_taxonomy_support($row_name, 'support')) { continue; } $row_values = array('key' => esc_attr($row_name), 'name' => esc_html($row_value->labels->name), 'hierarchical' => (string) $row_value->hierarchical, 'iptc_field_options' => '', 'exif_size' => MLACoreOptions::MLA_EXIF_SIZE, 'exif_text' => '', 'iptc_selected' => '', 'IPTC' => __('IPTC', 'media-library-assistant'), 'exif_selected' => '', 'EXIF' => __('EXIF', 'media-library-assistant'), 'keep_selected' => '', 'Keep' => __('Keep', 'media-library-assistant'), 'replace_selected' => '', 'Replace' => __('Replace', 'media-library-assistant'), 'delimiters_size' => 4, 'delimiters_text' => '', 'parent_select' => ''); if (array_key_exists($row_name, $current_values['taxonomy'])) { $current_value = $current_values['taxonomy'][$row_name]; $row_values['iptc_field_options'] = MLAOptions::_compose_iptc_option_list($current_value['iptc_value']); $row_values['exif_text'] = esc_attr($current_value['exif_value']); if ($current_value['iptc_first']) { $row_values['iptc_selected'] = 'selected="selected"'; } else { $row_values['exif_selected'] = 'selected="selected"'; } if ($current_value['keep_existing']) { $row_values['keep_selected'] = 'selected="selected"'; } else { $row_values['replace_selected'] = 'selected="selected"'; } $row_values['delimiters_text'] = $current_value['delimiters']; if ($row_value->hierarchical) { $parent = isset($current_value['parent']) ? (int) $current_value['parent'] : 0; $select_values = array('array' => 'taxonomy', 'key' => esc_attr($row_name), 'element' => 'parent', 'options' => MLAOptions::_compose_parent_option_list($row_name, $parent)); $row_values['parent_select'] = MLAData::mla_parse_template($select_template, $select_values); } } else { $row_values['iptc_field_options'] = MLAOptions::_compose_iptc_option_list('none'); $row_values['iptc_selected'] = 'selected="selected"'; $row_values['keep_selected'] = 'selected="selected"'; if ($row_value->hierarchical) { $select_values = array('array' => 'taxonomy', 'key' => esc_attr($row_name), 'element' => 'parent', 'options' => MLAOptions::_compose_parent_option_list($row_name, 0)); $row_values['parent_select'] = MLAData::mla_parse_template($select_template, $select_values); } } $table_rows .= MLAData::mla_parse_template($row_template, $row_values); } // foreach row $option_values = array('Field Title' => __('Field Title', 'media-library-assistant'), 'IPTC Value' => __('IPTC Value', 'media-library-assistant'), 'EXIF/Template Value' => __('EXIF/Template Value', 'media-library-assistant'), 'Priority' => __('Priority', 'media-library-assistant'), 'Existing Text' => __('Existing Text', 'media-library-assistant'), 'Delimiter(s)' => __('Delimiter(s)', 'media-library-assistant'), 'Parent' => __('Parent', 'media-library-assistant'), 'table_rows' => $table_rows, 'help' => $value['help']); return MLAData::mla_parse_template(MLAOptions::$mla_option_templates['iptc-exif-taxonomy-table'], $option_values); case 'iptc_exif_custom_mapping': if (empty($current_values['custom'])) { $table_rows = MLAData::mla_parse_template(MLAOptions::$mla_option_templates['iptc-exif-custom-empty-row'], array('No Mapping Rules' => __('No Custom Field Mapping Rules Defined', 'media-library-assistant'), 'column_count' => 5)); } else { $row_template = MLAOptions::$mla_option_templates['iptc-exif-custom-rule-row']; $table_rows = ''; $index = 0; } /* * One row for each existing rule, case insensitive "natural order" */ $sorted_keys = array(); foreach ($current_values['custom'] as $row_name => $current_value) { $sorted_keys[$current_value['name']] = $current_value['name']; } natcasesort($sorted_keys); $sorted_names = array(); foreach ($sorted_keys as $row_name) { $sorted_names[$row_name] = array(); } /* * Allow for multiple rules mapping the same name (an old bug) */ foreach ($current_values['custom'] as $row_name => $current_value) { $sorted_names[$current_value['name']][] = $row_name; } foreach ($sorted_names as $sorted_keys) { foreach ($sorted_keys as $row_name) { $current_value = $current_values['custom'][$row_name]; $row_values = array('column_count' => 5, 'column_count_meta' => 5 - 2, 'index' => $index++, 'key' => esc_attr($row_name), 'name_attr' => esc_attr($current_value['name']), 'name' => esc_html($current_value['name']), 'iptc_field_options' => MLAOptions::_compose_iptc_option_list($current_value['iptc_value']), 'exif_size' => MLACoreOptions::MLA_EXIF_SIZE, 'exif_text' => esc_attr($current_value['exif_value']), 'iptc_selected' => '', 'IPTC' => __('IPTC', 'media-library-assistant'), 'exif_selected' => '', 'EXIF' => __('EXIF', 'media-library-assistant'), 'keep_selected' => '', 'Keep' => __('Keep', 'media-library-assistant'), 'replace_selected' => '', 'Replace' => __('Replace', 'media-library-assistant'), 'Format' => __('Format', 'media-library-assistant'), 'native_format' => '', 'Native' => __('Native', 'media-library-assistant'), 'commas_format' => '', 'Commas' => __('Commas', 'media-library-assistant'), 'raw_format' => '', 'Raw' => __('Raw', 'media-library-assistant'), 'Option' => __('Option', 'media-library-assistant'), 'text_option' => '', 'Text' => __('Text', 'media-library-assistant'), 'single_option' => '', 'Single' => __('Single', 'media-library-assistant'), 'export_option' => '', 'Export' => __('Export', 'media-library-assistant'), 'array_option' => '', 'Array' => __('Array', 'media-library-assistant'), 'multi_option' => '', 'Multi' => __('Multi', 'media-library-assistant'), 'no_null_checked' => '', 'Delete NULL values' => __('Delete NULL values', 'media-library-assistant'), 'Delete Rule' => __('Delete Rule', 'media-library-assistant'), 'Delete Field' => __('Delete Rule AND Field', 'media-library-assistant'), 'Update Rule' => __('Update Rule', 'media-library-assistant'), 'Map All Attachments' => __('Map All Attachments', 'media-library-assistant')); if ($current_value['iptc_first']) { $row_values['iptc_selected'] = 'selected="selected"'; } else { $row_values['exif_selected'] = 'selected="selected"'; } if ($current_value['keep_existing']) { $row_values['keep_selected'] = 'selected="selected"'; } else { $row_values['replace_selected'] = 'selected="selected"'; } switch ($current_value['format']) { case 'commas': $row_values['commas_format'] = 'selected="selected"'; break; case 'raw': $row_values['raw_format'] = 'selected="selected"'; break; default: $row_values['native_format'] = 'selected="selected"'; } // format switch ($current_value['option']) { case 'single': $row_values['single_option'] = 'selected="selected"'; break; case 'export': $row_values['export_option'] = 'selected="selected"'; break; case 'array': $row_values['array_option'] = 'selected="selected"'; break; case 'multi': $row_values['multi_option'] = 'selected="selected"'; break; default: $row_values['text_option'] = 'selected="selected"'; } // option if ($current_value['no_null']) { $row_values['no_null_checked'] = 'checked="checked"'; } $table_rows .= MLAData::mla_parse_template($row_template, $row_values); } // foreach current_values key } // foreach sorted_name /* * Add a row for defining a new rule, existing Custom Field */ $row_template = MLAOptions::$mla_option_templates['iptc-exif-custom-new-rule-row']; $row_values = array('column_count' => 5, 'column_count_meta' => 5 - 2, 'Add new Rule' => __('Add a new Mapping Rule', 'media-library-assistant'), 'index' => MLACoreOptions::MLA_NEW_CUSTOM_RULE, 'field_name_options' => MLAOptions::_compose_custom_field_option_list('none', $current_values['custom']), 'iptc_field_options' => MLAOptions::_compose_iptc_option_list('none'), 'exif_size' => MLACoreOptions::MLA_EXIF_SIZE, 'exif_text' => '', 'iptc_selected' => 'selected="selected"', 'IPTC' => __('IPTC', 'media-library-assistant'), 'exif_selected' => '', 'EXIF' => __('EXIF', 'media-library-assistant'), 'keep_selected' => 'selected="selected"', 'Keep' => __('Keep', 'media-library-assistant'), 'replace_selected' => '', 'Replace' => __('Replace', 'media-library-assistant'), 'Format' => __('Format', 'media-library-assistant'), 'native_format' => 'selected="selected"', 'Native' => __('Native', 'media-library-assistant'), 'commas_format' => '', 'Commas' => __('Commas', 'media-library-assistant'), 'raw_format' => '', 'Raw' => __('Raw', 'media-library-assistant'), 'Option' => __('Option', 'media-library-assistant'), 'text_option' => '', 'Text' => __('Text', 'media-library-assistant'), 'single_option' => '', 'Single' => __('Single', 'media-library-assistant'), 'export_option' => '', 'Export' => __('Export', 'media-library-assistant'), 'array_option' => '', 'Array' => __('Array', 'media-library-assistant'), 'multi_option' => '', 'Multi' => __('Multi', 'media-library-assistant'), 'no_null_checked' => '', 'Delete NULL values' => __('Delete NULL values', 'media-library-assistant'), 'Add Rule' => __('Add Rule', 'media-library-assistant'), 'Map All Attachments' => __('Add Rule and Map All Attachments', 'media-library-assistant')); $table_rows .= MLAData::mla_parse_template($row_template, $row_values); /* * Add a row for defining a new rule, new Custom Field */ $row_template = MLAOptions::$mla_option_templates['iptc-exif-custom-new-field-row']; $row_values = array('column_count' => 5, 'column_count_meta' => 5 - 2, 'Add new Field' => __('Add a new Field and Mapping Rule', 'media-library-assistant'), 'index' => MLACoreOptions::MLA_NEW_CUSTOM_FIELD, 'field_name_size' => '24', 'iptc_field_options' => MLAOptions::_compose_iptc_option_list('none'), 'exif_size' => MLACoreOptions::MLA_EXIF_SIZE, 'exif_text' => '', 'iptc_selected' => 'selected="selected"', 'IPTC' => __('IPTC', 'media-library-assistant'), 'exif_selected' => '', 'EXIF' => __('EXIF', 'media-library-assistant'), 'keep_selected' => 'selected="selected"', 'Keep' => __('Keep', 'media-library-assistant'), 'replace_selected' => '', 'Replace' => __('Replace', 'media-library-assistant'), 'Format' => __('Format', 'media-library-assistant'), 'native_format' => 'selected="selected"', 'Native' => __('Native', 'media-library-assistant'), 'commas_format' => '', 'Commas' => __('Commas', 'media-library-assistant'), 'raw_format' => '', 'Raw' => __('Raw', 'media-library-assistant'), 'Option' => __('Option', 'media-library-assistant'), 'text_option' => '', 'Text' => __('Text', 'media-library-assistant'), 'single_option' => '', 'Single' => __('Single', 'media-library-assistant'), 'export_option' => '', 'Export' => __('Export', 'media-library-assistant'), 'array_option' => '', 'Array' => __('Array', 'media-library-assistant'), 'multi_option' => '', 'Multi' => __('Multi', 'media-library-assistant'), 'no_null_checked' => '', 'Delete NULL values' => __('Delete NULL values', 'media-library-assistant'), 'Add Field' => __('Add Field', 'media-library-assistant'), 'Map All Attachments' => __('Add Field and Map All Attachments', 'media-library-assistant')); $table_rows .= MLAData::mla_parse_template($row_template, $row_values); $option_values = array('Field Title' => __('Field Title', 'media-library-assistant'), 'IPTC Value' => __('IPTC Value', 'media-library-assistant'), 'EXIF/Template Value' => __('EXIF/Template Value', 'media-library-assistant'), 'Priority' => __('Priority', 'media-library-assistant'), 'Existing Text' => __('Existing Text', 'media-library-assistant'), 'table_rows' => $table_rows, 'help' => $value['help']); return MLAData::mla_parse_template(MLAOptions::$mla_option_templates['iptc-exif-custom-table'], $option_values); default: /* translators: 1: ERROR tag 2: option name */ return '<br>' . sprintf(__('%1$s: Render unknown custom %2$s.', 'media-library-assistant'), __('ERROR', 'media-library-assistant'), $key) . "\r\n"; } // switch $key // switch $key case 'update': case 'delete': $settings_changed = false; $messages = ''; switch ($key) { case 'iptc_exif_standard_mapping': $results = MLAOptions::_update_iptc_exif_standard_mapping($current_values, $args); $messages .= $results['message']; $current_values = $results['values']; $settings_changed = $results['changed']; break; case 'iptc_exif_taxonomy_mapping': $results = MLAOptions::_update_iptc_exif_taxonomy_mapping($current_values, $args); $messages .= $results['message']; $current_values = $results['values']; $settings_changed = $results['changed']; break; case 'iptc_exif_custom_mapping': $results = MLAOptions::_update_iptc_exif_custom_mapping($current_values, $args); $messages .= $results['message']; $current_values = $results['values']; $settings_changed = $results['changed']; break; case 'iptc_exif_mapping': $results = MLAOptions::_update_iptc_exif_standard_mapping($current_values, $args); $messages .= $results['message']; $current_values = $results['values']; $settings_changed = $results['changed']; $results = MLAOptions::_update_iptc_exif_taxonomy_mapping($current_values, $args); $messages .= $results['message']; $current_values = $results['values']; $settings_changed |= $results['changed']; $results = MLAOptions::_update_iptc_exif_custom_mapping($current_values, $args); $messages .= $results['message']; $current_values = $results['values']; $settings_changed |= $results['changed']; break; default: /* translators: 1: ERROR tag 2: option name */ return '<br>' . sprintf(__('%1$s: Update/delete unknown custom %2$s.', 'media-library-assistant'), __('ERROR', 'media-library-assistant'), $key) . "\r\n"; } // switch $key if ($settings_changed) { $settings_changed = MLACore::mla_update_option('iptc_exif_mapping', $current_values); if ($settings_changed) { $results = __('IPTC/EXIF mapping settings updated.', 'media-library-assistant') . "\r\n"; } else { $results = __('ERROR', 'media-library-assistant') . ': ' . __('IPTC/EXIF settings update failed.', 'media-library-assistant') . "\r\n"; } } else { $results = __('IPTC/EXIF no mapping changes detected.', 'media-library-assistant') . "\r\n"; } return $results . $messages; case 'reset': switch ($key) { case 'iptc_exif_standard_mapping': $current_values['standard'] = MLACoreOptions::$mla_option_definitions['iptc_exif_mapping']['std']['standard']; $settings_changed = MLACore::mla_update_option('iptc_exif_mapping', $current_values); if ($settings_changed) { /* translators: 1: field type */ return sprintf(__('%1$s settings saved.', 'media-library-assistant'), 'IPTC/EXIF ' . __('Standard field', 'media-library-assistant')) . "\r\n"; } else { /* translators: 1: ERROR tag 2: field type */ return sprintf(__('%1$s: IPTC/EXIF %2$s settings update failed.', 'media-library-assistant'), __('ERROR', 'media-library-assistant'), __('Standard field', 'media-library-assistant')) . "\r\n"; } case 'iptc_exif_taxonomy_mapping': $current_values['taxonomy'] = MLACoreOptions::$mla_option_definitions['iptc_exif_mapping']['std']['taxonomy']; $settings_changed = MLACore::mla_update_option('iptc_exif_mapping', $current_values); if ($settings_changed) { /* translators: 1: field type */ return sprintf(__('%1$s settings saved.', 'media-library-assistant'), 'IPTC/EXIF ' . __('Taxonomy term', 'media-library-assistant')) . "\r\n"; } else { /* translators: 1: ERROR tag 2: field type */ return sprintf(__('%1$s: IPTC/EXIF %2$s settings update failed.', 'media-library-assistant'), __('ERROR', 'media-library-assistant'), __('Taxonomy term', 'media-library-assistant')) . "\r\n"; } case 'iptc_exif_custom_mapping': $current_values['custom'] = MLACoreOptions::$mla_option_definitions['iptc_exif_mapping']['std']['custom']; $settings_changed = MLACore::mla_update_option('iptc_exif_mapping', $current_values); if ($settings_changed) { /* translators: 1: field type */ return sprintf(__('%1$s settings saved.', 'media-library-assistant'), 'IPTC/EXIF ' . __('Custom field', 'media-library-assistant')) . "\r\n"; } else { /* translators: 1: ERROR tag 2: field type */ return sprintf(__('%1$s: IPTC/EXIF %2$s settings update failed.', 'media-library-assistant'), __('ERROR', 'media-library-assistant'), __('Custom field', 'media-library-assistant')) . "\r\n"; } case 'iptc_exif_mapping': MLACore::mla_delete_option($key); /* translators: 1: option name, e.g., taxonomy_support */ return '<br>' . sprintf(__('Reset custom %1$s', 'media-library-assistant'), $key) . "\r\n"; default: /* translators: 1: ERROR tag 2: option name, e.g., taxonomy_support */ return '<br>' . sprintf(__('%1$s: Reset unknown custom %2$s', 'media-library-assistant'), __('ERROR', 'media-library-assistant'), $key) . "\r\n"; } // switch $key // switch $key default: /* translators: 1: ERROR tag 2: option name 3: action, e.g., update, delete, reset */ return '<br>' . sprintf(__('%1$s: Custom %2$s unknown action "%3$s"', 'media-library-assistant'), __('ERROR', 'media-library-assistant'), $key, $action) . "\r\n"; } // switch $action }
/** * Display taxonomy "checklist" form fields * * Adapted from /wp-admin/includes/ajax-actions.php function _wp_ajax_add_hierarchical_term(). * Includes the "? Search" area to filter the term checklist by entering part * or all of a word/phrase in the term label. * Output to the Media/Edit Media screen and to the Media Manager Modal Window. * * @since 1.71 * * @param object The current post * @param array The meta box parameters * * @return void Echoes HTML for the form fields */ public static function mla_checklist_meta_box($target_post, $box) { global $post; $defaults = array('taxonomy' => 'category', 'in_modal' => false); $post_id = $target_post->ID; if (!isset($box['args']) || !is_array($box['args'])) { $args = array(); } else { $args = $box['args']; } extract(wp_parse_args($args, $defaults), EXTR_SKIP); $tax = get_taxonomy($taxonomy); $name = $taxonomy == 'category' ? 'post_category' : 'tax_input[' . $taxonomy . ']'; /* * Id and Name attributes in the popup Modal Window must not conflict with * the underlying Edit Post/Page window, so we prefix with "mla-"/"mla_". */ if ($in_modal) { if (empty($post)) { $post = $target_post; // for wp_popular_terms_checklist } $div_taxonomy_id = "mla-taxonomy-{$taxonomy}"; $tabs_ul_id = "mla-{$taxonomy}-tabs"; $tab_all_id = "mla-{$taxonomy}-all"; $tab_all_ul_id = "mla-{$taxonomy}-checklist"; $tab_pop_id = "mla-{$taxonomy}-pop"; $tab_pop_ul_id = "mla-{$taxonomy}-checklist-pop"; $input_terms_name = "mla_attachments[{$post_id}][{$name}][]"; $input_terms_id = "mla-{$name}-id"; $div_adder_id = "mla-{$taxonomy}-adder"; $div_adder_class = "mla-hidden-children"; $link_adder_id = "mla-{$taxonomy}-add-toggle"; $link_adder_p_id = "mla-{$taxonomy}-add"; $div_search_id = "mla-{$taxonomy}-searcher"; $div_search_class = "mla-hidden-children"; $link_search_id = "mla-{$taxonomy}-search-toggle"; $link_search_p_id = "mla-{$taxonomy}-search"; $input_new_name = "new{$taxonomy}"; $input_new_id = "mla-new-{$taxonomy}"; $input_new_parent_name = "new{$taxonomy}_parent"; $input_new_submit_id = "mla-{$taxonomy}-add-submit"; $span_new_ajax_id = "mla-{$taxonomy}-ajax-response"; $input_search_name = "search-{$taxonomy}"; $input_search_id = "mla-search-{$taxonomy}"; $span_search_ajax_id = "mla-{$taxonomy}-search-ajax-response"; } else { $div_taxonomy_id = "taxonomy-{$taxonomy}"; $tabs_ul_id = "{$taxonomy}-tabs"; $tab_all_id = "{$taxonomy}-all"; $tab_all_ul_id = "{$taxonomy}checklist"; $tab_pop_id = "{$taxonomy}-pop"; $tab_pop_ul_id = "{$taxonomy}checklist-pop"; $input_terms_name = "{$name}[]"; $input_terms_id = "{$name}-id"; $div_adder_id = "{$taxonomy}-adder"; $div_adder_class = "wp-hidden-children"; $link_adder_id = "{$taxonomy}-add-toggle"; $link_adder_p_id = "{$taxonomy}-add"; $div_search_id = "{$taxonomy}-searcher"; $div_search_class = "wp-hidden-children"; $link_search_id = "{$taxonomy}-search-toggle"; $link_search_p_id = "{$taxonomy}-search"; $input_new_name = "new{$taxonomy}"; $input_new_id = "new{$taxonomy}"; $input_new_parent_name = "new{$taxonomy}_parent"; $input_new_submit_id = "{$taxonomy}-add-submit"; $span_new_ajax_id = "{$taxonomy}-ajax-response"; $input_search_name = "search-{$taxonomy}"; $input_search_id = "search-{$taxonomy}"; $span_search_ajax_id = "{$taxonomy}-search-ajax-response"; } ?> <div id="<?php echo $div_taxonomy_id; ?> " class="categorydiv"> <ul id="<?php echo $tabs_ul_id; ?> " class="category-tabs"> <li class="tabs"><a href="#<?php echo $tab_all_id; ?> "><?php echo $tax->labels->all_items; ?> </a></li> <li class="hide-if-no-js"><a href="#<?php echo $tab_pop_id; ?> "><?php _e('Most Used'); ?> </a></li> </ul> <div id="<?php echo $tab_pop_id; ?> " class="tabs-panel" style="display: none;"> <ul id="<?php echo $tab_pop_ul_id; ?> " class="categorychecklist form-no-clear" > <?php $popular_ids = wp_popular_terms_checklist($taxonomy); ?> </ul> </div> <div id="<?php echo $tab_all_id; ?> " class="tabs-panel"> <?php // Allows for an empty term set to be sent. 0 is an invalid Term ID and will be ignored by empty() checks. echo "<input type='hidden' name='{$input_terms_name}' id='{$input_terms_id}' value='0' />"; ?> <ul id="<?php echo $tab_all_ul_id; ?> " data-wp-lists="list:<?php echo $taxonomy; ?> " class="categorychecklist form-no-clear"> <?php if ($tax->hierarchical) { ?> <?php wp_terms_checklist($post->ID, array('taxonomy' => $taxonomy, 'popular_cats' => $popular_ids, 'checked_ontop' => MLACore::mla_taxonomy_support($taxonomy, 'checked-on-top'))); ?> <?php } else { ?> <?php $checklist_walker = new MLA_Checklist_Walker(); ?> <?php wp_terms_checklist($post->ID, array('taxonomy' => $taxonomy, 'popular_cats' => $popular_ids, 'checked_ontop' => MLACore::mla_taxonomy_support($taxonomy, 'checked-on-top'), 'walker' => $checklist_walker)); ?> <?php } ?> </ul> </div> <?php if (current_user_can($tax->cap->edit_terms)) { ?> <div id="<?php echo $div_adder_id; ?> " class="<?php echo $div_adder_class; ?> "> <h4> <a id="<?php echo $link_adder_id; ?> " href="#<?php echo $link_adder_p_id; ?> " class="hide-if-no-js"> <?php /* translators: %s: add new taxonomy label */ printf(__('+ %s', 'media-library-assistant'), $tax->labels->add_new_item); ?> </a> <a id="<?php echo $link_search_id; ?> " href="#<?php echo $link_search_p_id; ?> " class="hide-if-no-js"> <?php echo '? ' . __('Search', 'media-library-assistant'); ?> </a> </h4> <p id="<?php echo $link_adder_p_id; ?> " class="category-add wp-hidden-child"> <label class="screen-reader-text" for="<?php echo $input_new_name; ?> "><?php echo $tax->labels->add_new_item; ?> </label> <input type="text" name="<?php echo $input_new_name; ?> " id="<?php echo $input_new_id; ?> " class="form-required form-input-tip" value="<?php echo esc_attr($tax->labels->new_item_name); ?> " aria-required="true"/> <?php if ($tax->hierarchical) { ?> <label class="screen-reader-text" for="<?php echo $input_new_parent_name; ?> "> <?php echo $tax->labels->parent_item_colon; ?> </label> <?php wp_dropdown_categories(array('taxonomy' => $taxonomy, 'hide_empty' => 0, 'name' => $input_new_parent_name, 'orderby' => 'name', 'hierarchical' => 1, 'show_option_none' => '— ' . $tax->labels->parent_item . ' —')); ?> <?php } else { echo "<input type='hidden' name='{$input_new_parent_name}' id='{$input_new_parent_name}' value='-1' />"; } ?> <input type="button" id="<?php echo $input_new_submit_id; ?> " data-wp-lists="add:<?php echo $tab_all_ul_id; ?> :<?php echo $link_adder_p_id; ?> " class="button category-add-submit mla-taxonomy-add-submit" value="<?php echo esc_attr($tax->labels->add_new_item); ?> " /> <?php wp_nonce_field('add-' . $taxonomy, '_ajax_nonce-add-' . $taxonomy, false); ?> <span id="<?php echo $span_new_ajax_id; ?> "></span> </p> </div> <div id="<?php echo $div_search_id; ?> " class="<?php echo $div_search_class; ?> "> <p id="<?php echo $link_search_p_id; ?> " class="category-add wp-hidden-child"> <label class="screen-reader-text" for="<?php echo $input_search_name; ?> "><?php echo $tax->labels->search_items; ?> </label> <input type="text" name="<?php echo $input_search_name; ?> " id="<?php echo $input_search_id; ?> " class="form-required form-input-tip" value="<?php echo esc_attr($tax->labels->search_items); ?> " aria-required="true"/> <?php wp_nonce_field('search-' . $taxonomy, '_ajax_nonce-search-' . $taxonomy, false); ?> <span id="<?php echo $span_search_ajax_id; ?> "></span> </p> </div> <?php } ?> </div> <?php }
/** * Build the hidden row templates for inline editing (quick and bulk edit) * * inspired by inline_edit() in wp-admin\includes\class-wp-posts-list-table.php. * * @since 0.20 * * @param object MLA List Table object * * @return string HTML <form> markup for hidden rows */ private static function _build_inline_edit_form($MLAListTable) { $taxonomies = get_object_taxonomies('attachment', 'objects'); $hierarchical_taxonomies = array(); $flat_taxonomies = array(); foreach ($taxonomies as $tax_name => $tax_object) { if ($tax_object->hierarchical && $tax_object->show_ui && MLACore::mla_taxonomy_support($tax_name, 'quick-edit')) { $hierarchical_taxonomies[$tax_name] = $tax_object; } elseif ($tax_object->show_ui && MLACore::mla_taxonomy_support($tax_name, 'quick-edit')) { $flat_taxonomies[$tax_name] = $tax_object; } } $page_template_array = MLAData::mla_load_template('admin-inline-edit-form.tpl'); if (!is_array($page_template_array)) { /* translators: 1: ERROR tag 2: function name 3: non-array value */ error_log(sprintf(_x('%1$s: %2$s non-array "%3$s"', 'error_log', 'media-library-assistant'), __('ERROR', 'media-library-assistant'), 'MLA::_build_inline_edit_form', var_export($page_template_array, true)), 0); return ''; } if ($authors = self::mla_authors_dropdown()) { $authors_dropdown = ' <label class="inline-edit-author">' . "\n"; $authors_dropdown .= ' <span class="title">' . __('Author', 'media-library-assistant') . '</span>' . "\n"; $authors_dropdown .= $authors . "\n"; $authors_dropdown .= ' </label>' . "\n"; } else { $authors_dropdown = ''; } $custom_fields = ''; foreach (MLACore::mla_custom_field_support('quick_edit') as $slug => $details) { $page_values = array('slug' => $slug, 'label' => esc_attr($details['name'])); $custom_fields .= MLAData::mla_parse_template($page_template_array['custom_field'], $page_values); } /* * The middle column contains the hierarchical taxonomies, e.g., Attachment Category */ $quick_middle_column = ''; $bulk_middle_column = ''; if (count($hierarchical_taxonomies)) { $quick_category_blocks = ''; $bulk_category_blocks = ''; foreach ($hierarchical_taxonomies as $tax_name => $tax_object) { if (current_user_can($tax_object->cap->assign_terms)) { ob_start(); wp_terms_checklist(NULL, array('taxonomy' => $tax_name)); $tax_checklist = ob_get_contents(); ob_end_clean(); $page_values = array('tax_html' => esc_html($tax_object->labels->name), 'more' => __('more', 'media-library-assistant'), 'less' => __('less', 'media-library-assistant'), 'tax_attr' => esc_attr($tax_name), 'tax_checklist' => $tax_checklist, 'Add' => __('Add', 'media-library-assistant'), 'Remove' => __('Remove', 'media-library-assistant'), 'Replace' => __('Replace', 'media-library-assistant')); $category_block = MLAData::mla_parse_template($page_template_array['category_block'], $page_values); $taxonomy_options = MLAData::mla_parse_template($page_template_array['taxonomy_options'], $page_values); $quick_category_blocks .= $category_block; $bulk_category_blocks .= $category_block . $taxonomy_options; } // current_user_can } // foreach $hierarchical_taxonomies $page_values = array('category_blocks' => $quick_category_blocks); $quick_middle_column = MLAData::mla_parse_template($page_template_array['category_fieldset'], $page_values); $page_values = array('category_blocks' => $bulk_category_blocks); $bulk_middle_column = MLAData::mla_parse_template($page_template_array['category_fieldset'], $page_values); } // count( $hierarchical_taxonomies ) /* * The right-hand column contains the flat taxonomies, e.g., Attachment Tag */ $quick_right_column = ''; $bulk_right_column = ''; if (count($flat_taxonomies)) { $quick_tag_blocks = ''; $bulk_tag_blocks = ''; foreach ($flat_taxonomies as $tax_name => $tax_object) { if (current_user_can($tax_object->cap->assign_terms)) { $page_values = array('tax_html' => esc_html($tax_object->labels->name), 'tax_attr' => esc_attr($tax_name), 'Add' => __('Add', 'media-library-assistant'), 'Remove' => __('Remove', 'media-library-assistant'), 'Replace' => __('Replace', 'media-library-assistant')); $tag_block = MLAData::mla_parse_template($page_template_array['tag_block'], $page_values); $taxonomy_options = MLAData::mla_parse_template($page_template_array['taxonomy_options'], $page_values); $quick_tag_blocks .= $tag_block; $bulk_tag_blocks .= $tag_block . $taxonomy_options; } // current_user_can } // foreach $flat_taxonomies $page_values = array('tag_blocks' => $quick_tag_blocks); $quick_right_column = MLAData::mla_parse_template($page_template_array['tag_fieldset'], $page_values); $page_values = array('tag_blocks' => $bulk_tag_blocks); $bulk_right_column = MLAData::mla_parse_template($page_template_array['tag_fieldset'], $page_values); } // count( $flat_taxonomies ) if ($authors = self::mla_authors_dropdown(-1)) { $bulk_authors_dropdown = ' <label class="inline-edit-author alignright">' . "\n"; $bulk_authors_dropdown .= ' <span class="title">' . __('Author', 'media-library-assistant') . '</span>' . "\n"; $bulk_authors_dropdown .= $authors . "\n"; $bulk_authors_dropdown .= ' </label>' . "\n"; } else { $bulk_authors_dropdown = ''; } $bulk_custom_fields = ''; foreach (MLACore::mla_custom_field_support('bulk_edit') as $slug => $details) { $page_values = array('slug' => $slug, 'label' => esc_attr($details['name'])); $bulk_custom_fields .= MLAData::mla_parse_template($page_template_array['custom_field'], $page_values); } $set_parent_form = MLA::mla_set_parent_form(); $page_values = array('colspan' => $MLAListTable->get_column_count(), 'Quick Edit' => __('Quick Edit', 'media-library-assistant'), 'Title' => __('Title', 'media-library-assistant'), 'Name/Slug' => __('Name/Slug', 'media-library-assistant'), 'Caption' => __('Caption', 'media-library-assistant'), 'Description' => __('Description', 'media-library-assistant'), 'ALT Text' => __('ALT Text', 'media-library-assistant'), 'Parent ID' => __('Parent ID', 'media-library-assistant'), 'Select' => __('Select', 'media-library-assistant'), 'Menu Order' => __('Menu Order', 'media-library-assistant'), 'authors' => $authors_dropdown, 'custom_fields' => $custom_fields, 'quick_middle_column' => $quick_middle_column, 'quick_right_column' => $quick_right_column, 'Cancel' => __('Cancel', 'media-library-assistant'), 'Reset' => __('Reset', 'media-library-assistant'), 'Update' => __('Update', 'media-library-assistant'), 'Bulk Edit' => __('Bulk Edit', 'media-library-assistant'), 'bulk_middle_column' => $bulk_middle_column, 'bulk_right_column' => $bulk_right_column, 'bulk_authors' => $bulk_authors_dropdown, 'Comments' => __('Comments', 'media-library-assistant'), 'Pings' => __('Pings', 'media-library-assistant'), 'No Change' => __('No Change', 'media-library-assistant'), 'Allow' => __('Allow', 'media-library-assistant'), 'Do not allow' => __('Do not allow', 'media-library-assistant'), 'bulk_custom_fields' => $bulk_custom_fields, 'Map IPTC/EXIF metadata' => __('Map IPTC/EXIF metadata', 'media-library-assistant'), 'Map Custom Field metadata' => __('Map Custom Field metadata', 'media-library-assistant'), 'Bulk Waiting' => __('Waiting', 'media-library-assistant'), 'Bulk Running' => __('In-process', 'media-library-assistant'), 'Bulk Complete' => __('Complete', 'media-library-assistant'), 'Refresh' => __('Refresh', 'media-library-assistant'), 'set_parent_form' => $set_parent_form); $page_values = apply_filters('mla_list_table_inline_values', $page_values); $page_template = apply_filters('mla_list_table_inline_template', $page_template_array['page']); $parse_value = MLAData::mla_parse_template($page_template, $page_values); return apply_filters('mla_list_table_inline_parse', $parse_value, $page_template, $page_values); }
/** * Add hidden fields with the data for use in the inline editor * * @since 0.20 * * @param object A singular attachment (post) object * * @return string HTML <div> with row data */ protected function _build_inline_data($item) { $inline_data = "\r\n" . '<div class="hidden" id="inline_' . $item->ID . "\">\r\n"; $inline_data .= ' <div class="item_thumbnail">' . self::_build_item_thumbnail($item) . "</div>\r\n"; $inline_data .= ' <div class="post_title">' . esc_attr($item->post_title) . "</div>\r\n"; $inline_data .= ' <div class="post_name">' . esc_attr($item->post_name) . "</div>\r\n"; $inline_data .= ' <div class="post_excerpt">' . esc_attr($item->post_excerpt) . "</div>\r\n"; $inline_data .= ' <div class="post_content">' . esc_attr($item->post_content) . "</div>\r\n"; if (!empty($item->mla_wp_attachment_metadata)) { $inline_data .= ' <div class="image_alt">'; if (isset($item->mla_wp_attachment_image_alt)) { if (is_array($item->mla_wp_attachment_image_alt)) { $inline_data .= esc_attr($item->mla_wp_attachment_image_alt[0]); } else { $inline_data .= esc_attr($item->mla_wp_attachment_image_alt); } } $inline_data .= "</div>\r\n"; } $inline_data .= ' <div class="post_parent">' . $item->post_parent . "</div>\r\n"; if ($item->post_parent) { if (isset($item->parent_title)) { $parent_title = $item->parent_title; } else { $parent_title = __('(no title)', 'media-library-assistant'); } } else { $parent_title = ''; } $inline_data .= ' <div class="post_parent_title">' . $parent_title . "</div>\r\n"; $inline_data .= ' <div class="menu_order">' . $item->menu_order . "</div>\r\n"; $inline_data .= ' <div class="post_author">' . $item->post_author . "</div>\r\n"; $custom_fields = MLACore::mla_custom_field_support('quick_edit'); $custom_fields = array_merge($custom_fields, MLACore::mla_custom_field_support('bulk_edit')); foreach ($custom_fields as $slug => $details) { $value = get_metadata('post', $item->ID, $details['name'], true); if (is_array($value)) { if ('array' == $details['option']) { $value = implode(',', $value); } else { // '(Array)' indicates an existing array value in the field, which we preserve $value = '(Array)'; } } $inline_data .= ' <div class="' . $slug . '">' . esc_html($value) . "</div>\r\n"; } $taxonomies = get_object_taxonomies('attachment', 'objects'); foreach ($taxonomies as $tax_name => $tax_object) { if ($tax_object->show_ui && MLACore::mla_taxonomy_support($tax_name, 'quick-edit')) { $terms = get_object_term_cache($item->ID, $tax_name); if (false === $terms) { $terms = wp_get_object_terms($item->ID, $tax_name); wp_cache_add($item->ID, $terms, $tax_name . '_relationships'); } if (is_wp_error($terms) || empty($terms)) { $terms = array(); } $ids = array(); if ($tax_object->hierarchical) { foreach ($terms as $term) { $ids[] = $term->term_id; } $inline_data .= ' <div class="mla_category" id="' . $tax_name . '_' . $item->ID . '">' . implode(',', $ids) . "</div>\r\n"; } else { foreach ($terms as $term) { $ids[] = $term->name; } $inline_data .= ' <div class="mla_tags" id="' . $tax_name . '_' . $item->ID . '">' . esc_attr(implode(', ', $ids)) . "</div>\r\n"; } } } $inline_data = apply_filters('mla_list_table_build_inline_data', $inline_data, $item); $inline_data .= "</div>\r\n"; return $inline_data; }