/** * 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; }
/** * Flush debug information and clear buffer * * @since 2.12 * * @param string $destination Destination: 'buffer' (default), 'console', 'log' or 'none' * @param boolean $stop_collecting true (default) to stop, false to continue collection * * @return string debug content if $destination == 'buffer' else empty string */ public static function mla_debug_flush($destination = 'buffer', $stop_collecting = true) { $results = ''; switch ($destination) { case 'buffer': $results = MLACore::mla_debug_content(); break; case 'console': foreach (self::$mla_debug_messages as $message) { trigger_error($message, E_USER_WARNING); } break; case 'log': foreach (self::$mla_debug_messages as $message) { self::_debug_log($message); } break; } self::$mla_debug_messages = array(); if ($stop_collecting) { self::$mla_debug_mode = 'none'; } return $results; }
/** * The MLA Tag Cloud support function. * * This is an alternative to the WordPress wp_tag_cloud function, with additional * options to customize the hyperlink behind each term. * * @since 2.20 * * @param array $attr Attributes of the shortcode. * * @return string HTML content to display the tag cloud. */ public static function mla_tag_cloud($attr) { global $post; /* * These are the default parameters for tag cloud display */ $mla_item_specific_arguments = array('mla_link_attributes' => '', 'mla_link_class' => '', 'mla_link_style' => '', 'mla_link_href' => '', 'mla_link_text' => '', 'mla_nolink_text' => '', 'mla_rollover_text' => '', 'mla_caption' => ''); $mla_arguments = array_merge(array('mla_output' => 'flat', 'mla_style' => NULL, 'mla_markup' => NULL, 'mla_float' => is_rtl() ? 'right' : 'left', 'mla_itemwidth' => MLACore::mla_get_option('mla_tag_cloud_itemwidth'), 'mla_margin' => MLACore::mla_get_option('mla_tag_cloud_margin'), 'mla_target' => '', 'mla_debug' => false, 'term_id' => NULL, 'mla_end_size' => 1, 'mla_mid_size' => 2, 'mla_prev_text' => '« ' . __('Previous', 'media-library-assistant'), 'mla_next_text' => __('Next', 'media-library-assistant') . ' »', 'mla_page_parameter' => 'mla_cloud_current', 'mla_cloud_current' => NULL, 'mla_paginate_total' => NULL, 'mla_paginate_type' => 'plain'), $mla_item_specific_arguments); $defaults = array_merge(self::$mla_get_terms_parameters, array('smallest' => 8, 'largest' => 22, 'unit' => 'pt', 'separator' => "\n", 'single_text' => '%d item', 'multiple_text' => '%d items', 'echo' => false, 'link' => 'view', 'current_item' => '', 'current_item_class' => 'mla_current_item', 'itemtag' => 'ul', 'termtag' => 'li', 'captiontag' => '', 'columns' => MLACore::mla_get_option('mla_tag_cloud_columns')), $mla_arguments); /* * The mla_paginate_current parameter can be changed to support multiple galleries per page. */ if (!isset($attr['mla_page_parameter'])) { $attr['mla_page_parameter'] = $defaults['mla_page_parameter']; } $mla_page_parameter = $attr['mla_page_parameter']; /* * Special handling of mla_page_parameter to make * "MLA pagination" easier. Look for this parameter in $_REQUEST * if it's not present in the shortcode itself. */ if (!isset($attr[$mla_page_parameter])) { if (isset($_REQUEST[$mla_page_parameter])) { $attr[$mla_page_parameter] = $_REQUEST[$mla_page_parameter]; } } // $instance supports multiple clouds in one page/post static $instance = 0; $instance++; /* * Some values are already known, and can be used in data selection parameters */ $upload_dir = wp_upload_dir(); $page_values = array('instance' => $instance, 'selector' => "mla_tag_cloud-{$instance}", 'site_url' => site_url(), 'base_url' => $upload_dir['baseurl'], 'base_dir' => $upload_dir['basedir'], 'id' => $post->ID, 'page_ID' => $post->ID, 'page_author' => $post->post_author, 'page_date' => $post->post_date, 'page_content' => $post->post_content, 'page_title' => $post->post_title, 'page_excerpt' => $post->post_excerpt, 'page_status' => $post->post_status, 'page_name' => $post->post_name, 'page_modified' => $post->post_modified, 'page_guid' => $post->guid, 'page_type' => $post->post_type, 'page_url' => get_page_link()); /* * Look for 'request' substitution parameters, * which can be added to any input parameter */ foreach ($attr as $attr_key => $attr_value) { /* * item-specific Display Content parameters must be evaluated * later, when all of the information is available. */ if (array_key_exists($attr_key, $mla_item_specific_arguments)) { continue; } $attr_value = str_replace('{+', '[+', str_replace('+}', '+]', $attr_value)); $replacement_values = MLAData::mla_expand_field_level_parameters($attr_value, NULL, $page_values); $attr[$attr_key] = MLAData::mla_parse_template($attr_value, $replacement_values); } $attr = apply_filters('mla_tag_cloud_attributes', $attr); $arguments = shortcode_atts($defaults, $attr); /* * $mla_page_parameter, if non-default, doesn't make it through the shortcode_atts filter, * so we handle it separately */ if (!isset($arguments[$mla_page_parameter])) { if (isset($attr[$mla_page_parameter])) { $arguments[$mla_page_parameter] = $attr[$mla_page_parameter]; } else { $arguments[$mla_page_parameter] = $defaults['mla_cloud_current']; } } /* * Process the pagination parameter, if present */ if (isset($arguments[$mla_page_parameter])) { $arguments['offset'] = $arguments['limit'] * ($arguments[$mla_page_parameter] - 1); } /* * Clean up the current_item to separate term_id from slug */ if (!empty($arguments['current_item']) && ctype_digit($arguments['current_item'])) { $arguments['current_item'] = absint($arguments['current_item']); } $arguments = apply_filters('mla_tag_cloud_arguments', $arguments); self::$mla_debug = !empty($arguments['mla_debug']) ? trim(strtolower($arguments['mla_debug'])) : false; if (self::$mla_debug) { if ('true' == self::$mla_debug) { MLACore::mla_debug_mode('buffer'); } elseif ('log' == self::$mla_debug) { MLACore::mla_debug_mode('log'); } else { self::$mla_debug = false; } } if (self::$mla_debug) { MLACore::mla_debug_add('<strong>' . __('mla_debug attributes', 'media-library-assistant') . '</strong> = ' . var_export($attr, true)); MLACore::mla_debug_add('<strong>' . __('mla_debug arguments', 'media-library-assistant') . '</strong> = ' . var_export($arguments, true)); } /* * Determine output type and templates */ $output_parameters = array_map('strtolower', array_map('trim', explode(',', $arguments['mla_output']))); if ($is_grid = 'grid' == $output_parameters[0]) { $default_style = MLACore::mla_get_option('default_tag_cloud_style'); $default_markup = MLACore::mla_get_option('default_tag_cloud_markup'); if (NULL == $arguments['mla_style']) { $arguments['mla_style'] = $default_style; } if (NULL == $arguments['mla_markup']) { $arguments['mla_markup'] = $default_markup; $arguments['itemtag'] = 'dl'; $arguments['termtag'] = 'dt'; $arguments['captiontag'] = 'dd'; } } if ($is_list = 'list' == $output_parameters[0]) { $default_style = 'none'; if (empty($arguments['captiontag'])) { $default_markup = 'tag-cloud-ul'; } else { $default_markup = 'tag-cloud-dl'; if ('dd' == $arguments['captiontag']) { $arguments['itemtag'] = 'dl'; $arguments['termtag'] = 'dt'; } } if (NULL == $arguments['mla_style']) { $arguments['mla_style'] = $default_style; } if (NULL == $arguments['mla_markup']) { $arguments['mla_markup'] = $default_markup; } } $is_pagination = in_array($output_parameters[0], array('previous_link', 'current_link', 'next_link', 'previous_page', 'next_page', 'paginate_links')); /* * Convert lists to arrays */ if (is_string($arguments['taxonomy'])) { $arguments['taxonomy'] = explode(',', $arguments['taxonomy']); } if (is_string($arguments['post_type'])) { $arguments['post_type'] = explode(',', $arguments['post_type']); } if (is_string($arguments['post_status'])) { $arguments['post_status'] = explode(',', $arguments['post_status']); } $tags = self::mla_get_terms($arguments); if (self::$mla_debug) { $cloud = MLACore::mla_debug_flush(); } else { $cloud = ''; } /* * Invalid taxonomy names return WP_Error */ if (is_wp_error($tags)) { $cloud .= '<strong>' . __('ERROR', 'media-library-assistant') . ': ' . $tags->get_error_message() . '</strong>, ' . $tags->get_error_data($tags->get_error_code()); if ('array' == $arguments['mla_output']) { return array($cloud); } if (empty($arguments['echo'])) { return $cloud; } echo $cloud; return; } if (empty($tags)) { if (self::$mla_debug) { MLACore::mla_debug_add('<strong>' . __('mla_debug empty cloud', 'media-library-assistant') . '</strong>, query = ' . var_export($arguments, true)); $cloud = MLACore::mla_debug_flush(); } $cloud .= $arguments['mla_nolink_text']; if ('array' == $arguments['mla_output']) { return array($cloud); } if (empty($arguments['echo'])) { return $cloud; } echo $cloud; return; } /* * Fill in the item_specific link properties, calculate cloud parameters */ if (isset($tags['found_rows'])) { $found_rows = $tags['found_rows']; unset($tags['found_rows']); } else { $found_rows = count($tags); } $min_count = 0x7fffffff; $max_count = 0; $min_scaled_count = 0x7fffffff; $max_scaled_count = 0; foreach ($tags as $key => $tag) { $tag_count = isset($tag->count) ? $tag->count : 0; $tag->scaled_count = apply_filters('mla_tag_cloud_scale', round(log10($tag_count + 1) * 100), $attr, $arguments, $tag); if ($tag_count < $min_count) { $min_count = $tag_count; } if ($tag_count > $max_count) { $max_count = $tag_count; } if ($tag->scaled_count < $min_scaled_count) { $min_scaled_count = $tag->scaled_count; } if ($tag->scaled_count > $max_scaled_count) { $max_scaled_count = $tag->scaled_count; } $link = get_edit_tag_link($tag->term_id, $tag->taxonomy); if (!is_wp_error($link)) { $tags[$key]->edit_link = $link; $link = get_term_link(intval($tag->term_id), $tag->taxonomy); $tags[$key]->term_link = $link; } if (is_wp_error($link)) { $cloud = '<strong>' . __('ERROR', 'media-library-assistant') . ': ' . $link->get_error_message() . '</strong>, ' . $link->get_error_data($link->get_error_code()); if ('array' == $arguments['mla_output']) { return array($cloud); } if (empty($arguments['echo'])) { return $cloud; } echo $cloud; return; } if ('edit' == $arguments['link']) { $tags[$key]->link = $tags[$key]->edit_link; } else { $tags[$key]->link = $tags[$key]->term_link; } } // foreach tag /* * The default MLA style template includes "margin: 1.5%" to put a bit of * minimum space between the columns. "mla_margin" can be used to change * this. "mla_itemwidth" can be used with "columns=0" to achieve a * "responsive" layout. */ $columns = absint($arguments['columns']); $margin_string = strtolower(trim($arguments['mla_margin'])); if (is_numeric($margin_string) && 0 != $margin_string) { $margin_string .= '%'; // Legacy values are always in percent } if ('%' == substr($margin_string, -1)) { $margin_percent = (double) substr($margin_string, 0, strlen($margin_string) - 1); } else { $margin_percent = 0; } $width_string = strtolower(trim($arguments['mla_itemwidth'])); if ('none' != $width_string) { switch ($width_string) { case 'exact': $margin_percent = 0; // fallthru // fallthru case 'calculate': $width_string = $columns > 0 ? floor(1000 / $columns) / 10 - 2.0 * $margin_percent : 100 - 2.0 * $margin_percent; // fallthru // fallthru default: if (is_numeric($width_string) && 0 != $width_string) { $width_string .= '%'; // Legacy values are always in percent } } } // $use_width $float = strtolower($arguments['mla_float']); if (!in_array($float, array('left', 'none', 'right'))) { $float = is_rtl() ? 'right' : 'left'; } /* * Calculate cloud parameters */ $spread = $max_scaled_count - $min_scaled_count; if ($spread <= 0) { $spread = 1; } $font_spread = $arguments['largest'] - $arguments['smallest']; if ($font_spread < 0) { $font_spread = 1; } $font_step = $font_spread / $spread; $style_values = array_merge($page_values, array('mla_output' => $arguments['mla_output'], 'mla_style' => $arguments['mla_style'], 'mla_markup' => $arguments['mla_markup'], 'taxonomy' => implode('-', $arguments['taxonomy']), 'current_item' => $arguments['current_item'], 'itemtag' => tag_escape($arguments['itemtag']), 'termtag' => tag_escape($arguments['termtag']), 'captiontag' => tag_escape($arguments['captiontag']), 'columns' => $columns, 'itemwidth' => $width_string, 'margin' => $margin_string, 'float' => $float, 'found_rows' => $found_rows, 'min_count' => $min_count, 'max_count' => $max_count, 'min_scaled_count' => $min_scaled_count, 'max_scaled_count' => $max_scaled_count, 'spread' => $spread, 'smallest' => $arguments['smallest'], 'largest' => $arguments['largest'], 'unit' => $arguments['unit'], 'font_spread' => $font_spread, 'font_step' => $font_step, 'separator' => $arguments['separator'], 'single_text' => $arguments['single_text'], 'multiple_text' => $arguments['multiple_text'], 'echo' => $arguments['echo'], 'link' => $arguments['link'])); $style_template = $gallery_style = ''; $use_mla_tag_cloud_style = ($is_grid || $is_list) && 'none' != strtolower($style_values['mla_style']); if (apply_filters('use_mla_tag_cloud_style', $use_mla_tag_cloud_style, $style_values['mla_style'])) { $style_template = MLAShortcode_support::mla_fetch_gallery_template($style_values['mla_style'], 'style'); if (empty($style_template)) { $style_values['mla_style'] = $default_style; $style_template = MLAShortcode_support::mla_fetch_gallery_template($default_style, 'style'); } if (!empty($style_template)) { /* * Look for 'query' and 'request' substitution parameters */ $style_values = MLAData::mla_expand_field_level_parameters($style_template, $attr, $style_values); /* * Clean up the template to resolve width or margin == 'none' */ if ('none' == $margin_string) { $style_values['margin'] = '0'; $style_template = preg_replace('/margin:[\\s]*\\[\\+margin\\+\\][\\%]*[\\;]*/', '', $style_template); } if ('none' == $width_string) { $style_values['itemwidth'] = 'auto'; $style_template = preg_replace('/width:[\\s]*\\[\\+itemwidth\\+\\][\\%]*[\\;]*/', '', $style_template); } $style_values = apply_filters('mla_tag_cloud_style_values', $style_values); $style_template = apply_filters('mla_tag_cloud_style_template', $style_template); $gallery_style = MLAData::mla_parse_template($style_template, $style_values); $gallery_style = apply_filters('mla_tag_cloud_style_parse', $gallery_style, $style_template, $style_values); } // !empty template } // use_mla_tag_cloud_style $markup_values = $style_values; if ($is_grid || $is_list) { $open_template = MLAShortcode_support::mla_fetch_gallery_template($markup_values['mla_markup'] . '-open', 'markup'); if (false === $open_template) { $markup_values['mla_markup'] = $default_markup; $open_template = MLAShortcode_support::mla_fetch_gallery_template($default_markup, 'markup'); } if (empty($open_template)) { $open_template = ''; } if ($is_grid) { $row_open_template = MLAShortcode_support::mla_fetch_gallery_template($markup_values['mla_markup'] . '-row-open', 'markup'); if (empty($row_open_template)) { $row_open_template = ''; } } else { $row_open_template = ''; } $item_template = MLAShortcode_support::mla_fetch_gallery_template($markup_values['mla_markup'] . '-item', 'markup'); if (empty($item_template)) { $item_template = ''; } if ($is_grid) { $row_close_template = MLAShortcode_support::mla_fetch_gallery_template($markup_values['mla_markup'] . '-row-close', 'markup'); if (empty($row_close_template)) { $row_close_template = ''; } } else { $row_close_template = ''; } $close_template = MLAShortcode_support::mla_fetch_gallery_template($markup_values['mla_markup'] . '-close', 'markup'); if (empty($close_template)) { $close_template = ''; } /* * Look for gallery-level markup substitution parameters */ $new_text = $open_template . $row_open_template . $row_close_template . $close_template; $markup_values = MLAData::mla_expand_field_level_parameters($new_text, $attr, $markup_values); $markup_values = apply_filters('mla_tag_cloud_open_values', $markup_values); $open_template = apply_filters('mla_tag_cloud_open_template', $open_template); if (empty($open_template)) { $gallery_open = ''; } else { $gallery_open = MLAData::mla_parse_template($open_template, $markup_values); } $gallery_open = apply_filters('mla_tag_cloud_open_parse', $gallery_open, $open_template, $markup_values); $cloud .= $gallery_style . $gallery_open; } elseif ($is_pagination) { /* * Handle 'previous_page', 'next_page', and 'paginate_links' */ if (isset($attr['limit'])) { $attr['posts_per_page'] = $attr['limit']; } $pagination_result = self::_process_pagination_output_types($output_parameters, $markup_values, $arguments, $attr, $found_rows); if (false !== $pagination_result) { return $pagination_result; } /* * For "previous_link", "current_link" and "next_link", discard all of the $tags except the appropriate choice */ $link_type = $output_parameters[0]; if (!in_array($link_type, array('previous_link', 'current_link', 'next_link'))) { return ''; // unknown output type } $is_wrap = isset($output_parameters[1]) && 'wrap' == $output_parameters[1]; if (empty($arguments['term_id'])) { $target_id = -2; // won't match anything } else { $current_id = $arguments['term_id']; foreach ($tags as $id => $tag) { if ($tag->term_id == $current_id) { break; } } switch ($link_type) { case 'previous_link': $target_id = $id - 1; break; case 'next_link': $target_id = $id + 1; break; case 'current_link': default: $target_id = $id; } // link_type } $target = NULL; if (isset($tags[$target_id])) { $target = $tags[$target_id]; } elseif ($is_wrap) { switch ($link_type) { case 'previous_link': $target = array_pop($tags); break; case 'next_link': $target = array_shift($tags); } // link_type } // is_wrap if (isset($target)) { $tags = array($target); } elseif (!empty($arguments['mla_nolink_text'])) { return self::_process_shortcode_parameter($arguments['mla_nolink_text'], $markup_values) . '</a>'; } else { return ''; } } // is_pagination /* * Accumulate links for flat and array output */ $tag_links = array(); $column_index = 0; foreach ($tags as $key => $tag) { $item_values = $markup_values; /* * fill in item-specific elements */ $item_values['index'] = (string) 1 + $column_index; if ($item_values['columns'] > 0 && (1 + $column_index) % $item_values['columns'] == 0) { $item_values['last_in_row'] = 'last_in_row'; } else { $item_values['last_in_row'] = ''; } $item_values['key'] = $key; $item_values['term_id'] = $tag->term_id; $item_values['name'] = wptexturize($tag->name); $item_values['slug'] = wptexturize($tag->slug); $item_values['term_group'] = $tag->term_group; $item_values['term_taxonomy_id'] = $tag->term_taxonomy_id; $item_values['taxonomy'] = wptexturize($tag->taxonomy); $item_values['current_item_class'] = ''; $item_values['description'] = wptexturize($tag->description); $item_values['parent'] = $tag->parent; $item_values['count'] = isset($tag->count) ? $tag->count : 0; $item_values['scaled_count'] = $tag->scaled_count; $item_values['font_size'] = str_replace(',', '.', $item_values['smallest'] + ($item_values['scaled_count'] - $item_values['min_scaled_count']) * $item_values['font_step']); $item_values['link_url'] = $tag->link; $item_values['editlink_url'] = $tag->edit_link; $item_values['termlink_url'] = $tag->term_link; // Added in the code below: // 'caption', 'link_attributes', 'current_item_class', 'rollover_text', 'link_style', 'link_text', 'editlink', 'termlink', 'thelink' if (!empty($arguments['current_item'])) { if (is_integer($arguments['current_item'])) { if ($arguments['current_item'] == $tag->term_id) { $item_values['current_item_class'] = $arguments['current_item_class']; } } else { if ($arguments['current_item'] == $tag->slug) { $item_values['current_item_class'] = $arguments['current_item_class']; } } } /* * Add item_specific field-level substitution parameters */ $new_text = isset($item_template) ? $item_template : ''; foreach ($mla_item_specific_arguments as $index => $value) { $new_text .= str_replace('{+', '[+', str_replace('+}', '+]', $arguments[$index])); } $item_values = MLAData::mla_expand_field_level_parameters($new_text, $attr, $item_values); if ($item_values['captiontag']) { $item_values['caption'] = wptexturize($tag->description); if (!empty($arguments['mla_caption'])) { $item_values['caption'] = wptexturize(self::_process_shortcode_parameter($arguments['mla_caption'], $item_values)); } } else { $item_values['caption'] = ''; } if (!empty($arguments['mla_link_text'])) { $link_text = self::_process_shortcode_parameter($arguments['mla_link_text'], $item_values); } else { $link_text = false; } /* * Apply the Display Content parameters. */ if (!empty($arguments['mla_target'])) { $link_attributes = 'target="' . $arguments['mla_target'] . '" '; } else { $link_attributes = ''; } if (!empty($arguments['mla_link_attributes'])) { $link_attributes .= self::_process_shortcode_parameter($arguments['mla_link_attributes'], $item_values) . ' '; } if (!empty($arguments['mla_link_class'])) { $link_attributes .= 'class="' . self::_process_shortcode_parameter($arguments['mla_link_class'], $item_values) . '" '; } $item_values['link_attributes'] = $link_attributes; $item_values['rollover_text'] = sprintf(_n($item_values['single_text'], $item_values['multiple_text'], $item_values['count'], 'media-library-assistant'), number_format_i18n($item_values['count'])); if (!empty($arguments['mla_rollover_text'])) { $item_values['rollover_text'] = esc_attr(self::_process_shortcode_parameter($arguments['mla_rollover_text'], $item_values)); } if (!empty($arguments['mla_link_href'])) { $link_href = self::_process_shortcode_parameter($arguments['mla_link_href'], $item_values); $item_values['link_url'] = $link_href; } else { $link_href = ''; } if (!empty($arguments['mla_link_style'])) { $item_values['link_style'] = esc_attr(self::_process_shortcode_parameter($arguments['mla_link_style'], $item_values)); } else { $item_values['link_style'] = 'font-size: ' . $item_values['font_size'] . $item_values['unit']; } if (!empty($arguments['mla_link_text'])) { $item_values['link_text'] = esc_attr(self::_process_shortcode_parameter($arguments['mla_link_text'], $item_values)); } else { $item_values['link_text'] = $item_values['name']; } /* * Editlink, termlink and thelink */ $item_values['editlink'] = sprintf('<a %1$shref="%2$s" title="%3$s" style="%4$s">%5$s</a>', $link_attributes, $item_values['editlink_url'], $item_values['rollover_text'], $item_values['link_style'], $item_values['link_text']); $item_values['termlink'] = sprintf('<a %1$shref="%2$s" title="%3$s" style="%4$s">%5$s</a>', $link_attributes, $item_values['termlink_url'], $item_values['rollover_text'], $item_values['link_style'], $item_values['link_text']); if (!empty($link_href)) { $item_values['thelink'] = sprintf('<a %1$shref="%2$s" title="%3$s" style="%4$s">%5$s</a>', $link_attributes, $link_href, $item_values['rollover_text'], $item_values['link_style'], $item_values['link_text']); } elseif ('edit' == $arguments['link']) { $item_values['thelink'] = $item_values['editlink']; } elseif ('view' == $arguments['link']) { $item_values['thelink'] = $item_values['termlink']; } elseif ('span' == $arguments['link']) { $item_values['thelink'] = sprintf('<span %1$sstyle="%2$s">%3$s</a>', $link_attributes, $item_values['link_style'], $item_values['link_text']); } else { $item_values['thelink'] = $item_values['link_text']; } if ($is_grid || $is_list) { /* * Start of row markup */ if ($is_grid && ($markup_values['columns'] > 0 && $column_index % $markup_values['columns'] == 0)) { $markup_values = apply_filters('mla_tag_cloud_row_open_values', $markup_values); $row_open_template = apply_filters('mla_tag_cloud_row_open_template', $row_open_template); $parse_value = MLAData::mla_parse_template($row_open_template, $markup_values); $cloud .= apply_filters('mla_tag_cloud_row_open_parse', $parse_value, $row_open_template, $markup_values); } /* * item markup */ $column_index++; $item_values = apply_filters('mla_tag_cloud_item_values', $item_values); $item_template = apply_filters('mla_tag_cloud_item_template', $item_template); $parse_value = MLAData::mla_parse_template($item_template, $item_values); $cloud .= apply_filters('mla_tag_cloud_item_parse', $parse_value, $item_template, $item_values); /* * End of row markup */ if ($is_grid && ($markup_values['columns'] > 0 && $column_index % $markup_values['columns'] == 0)) { $markup_values = apply_filters('mla_tag_cloud_row_close_values', $markup_values); $row_close_template = apply_filters('mla_tag_cloud_row_close_template', $row_close_template); $parse_value = MLAData::mla_parse_template($row_close_template, $markup_values); $cloud .= apply_filters('mla_tag_cloud_row_close_parse', $parse_value, $row_close_template, $markup_values); } } elseif ($is_pagination) { return $item_values['thelink']; } else { $column_index++; $item_values = apply_filters('mla_tag_cloud_item_values', $item_values); $tag_links[] = apply_filters('mla_tag_cloud_item_parse', $item_values['thelink'], NULL, $item_values); } } // foreach tag if ($is_grid || $is_list) { /* * Close out partial row */ if ($is_grid && !($markup_values['columns'] > 0 && $column_index % $markup_values['columns'] == 0)) { $markup_values = apply_filters('mla_tag_cloud_row_close_values', $markup_values); $row_close_template = apply_filters('mla_tag_cloud_row_close_template', $row_close_template); $parse_value = MLAData::mla_parse_template($row_close_template, $markup_values); $cloud .= apply_filters('mla_tag_cloud_row_close_parse', $parse_value, $row_close_template, $markup_values); } $markup_values = apply_filters('mla_tag_cloud_close_values', $markup_values); $close_template = apply_filters('mla_tag_cloud_close_template', $close_template); $parse_value = MLAData::mla_parse_template($close_template, $markup_values); $cloud .= apply_filters('mla_tag_cloud_close_parse', $parse_value, $close_template, $markup_values); } else { switch ($markup_values['mla_output']) { case 'array': $cloud =& $tag_links; break; case 'flat': default: $cloud .= join($markup_values['separator'], $tag_links); break; } // switch format } //$cloud = wp_generate_tag_cloud( $tags, $arguments ); if ('array' == $arguments['mla_output'] || empty($arguments['echo'])) { return $cloud; } echo $cloud; }
/** * The MLA Term List support function. * * This is an alternative to the WordPress wp_list_categories, wp_dropdown_categories * and wp_terms_checklist functions, with additional options to customize the hyperlink * behind each term. * * @since 2.25 * * @param array $attr Attributes of the shortcode. * * @return string HTML content to display the term list, dropdown control or checklist. */ public static function mla_term_list($attr) { global $post; /* * Some do_shortcode callers may not have a specific post in mind */ if (!is_object($post)) { $post = (object) array('ID' => 0, 'post_author' => '0', 'post_date' => '', 'post_content' => '', 'post_title' => '', 'post_excerpt' => '', 'post_status' => '', 'post_name' => '', 'post_modified' => '', 'guid' => '', 'post_type' => ''); } $defaults = array_merge(self::$mla_get_terms_parameters, array('echo' => false, 'mla_debug' => false, 'mla_output' => 'ulist', 'hierarchical' => 'true', 'separator' => "\n", 'single_text' => '%d item', 'multiple_text' => '%d items', 'link' => 'current', 'current_item' => '', 'current_item_class' => 'mla_current_item', 'mla_item_parameter' => 'current_item', 'show_count' => false, 'mla_style' => NULL, 'mla_markup' => NULL, 'itemtag' => 'ul', 'termtag' => 'li', 'captiontag' => '', 'mla_nolink_text' => '', 'mla_target' => '', 'hide_if_empty' => false, 'option_all_text' => '', 'option_all_value' => '0', 'option_none_text' => '', 'option_none_value' => '-1', 'depth' => 0, 'child_of' => 0, 'include_tree' => NULL, 'exclude_tree' => NULL), self::$term_list_item_specific_arguments); /* * Filter the attributes before $mla_item_parameter and "request:" prefix processing. */ $attr = apply_filters('mla_term_list_raw_attributes', $attr); /* * The current_item parameter can be changed to support * multiple lists per page. */ if (!isset($attr['mla_item_parameter'])) { $attr['mla_item_parameter'] = $defaults['mla_item_parameter']; } $mla_item_parameter = $attr['mla_item_parameter']; /* * Special handling of mla_item_parameter to make * multiple lists per page easier. Look for this parameter in $_REQUEST * if it's not present in the shortcode itself. */ if (!isset($attr[$mla_item_parameter])) { if (isset($_REQUEST[$mla_item_parameter])) { $attr[$mla_item_parameter] = $_REQUEST[$mla_item_parameter]; } } // $instance supports multiple lists in one page/post static $instance = 0; $instance++; /* * Some values are already known, and can be used in data selection parameters */ $upload_dir = wp_upload_dir(); $page_values = array('instance' => $instance, 'selector' => "mla_term_list-{$instance}", 'site_url' => site_url(), 'base_url' => $upload_dir['baseurl'], 'base_dir' => $upload_dir['basedir'], 'id' => $post->ID, 'page_ID' => $post->ID, 'page_author' => $post->post_author, 'page_date' => $post->post_date, 'page_content' => $post->post_content, 'page_title' => $post->post_title, 'page_excerpt' => $post->post_excerpt, 'page_status' => $post->post_status, 'page_name' => $post->post_name, 'page_modified' => $post->post_modified, 'page_guid' => $post->guid, 'page_type' => $post->post_type, 'page_url' => get_page_link()); /* * Determine markup template to get default arguments */ $arguments = shortcode_atts($defaults, $attr); /* * $mla_item_parameter, if non-default, doesn't make it through the shortcode_atts * filter, so we handle it separately */ if (!isset($arguments[$mla_item_parameter])) { if (isset($attr[$mla_item_parameter])) { $arguments[$mla_item_parameter] = $attr[$mla_item_parameter]; } else { $arguments[$mla_item_parameter] = $defaults['current_item']; } } if ($arguments['mla_markup']) { $template = $arguments['mla_markup']; } else { $output_parameters = array_map('strtolower', array_map('trim', explode(',', $arguments['mla_output']))); if (in_array($output_parameters[0], array('list', 'ulist', 'olist', 'dlist'))) { if ('dlist' == $output_parameters[0] || 'list' == $output_parameters[0] && 'dd' == $arguments['captiontag']) { $template = 'term-list-dl'; } else { $template = 'term-list-ul'; } } elseif ('dropdown' == $output_parameters[0]) { $template = 'term-list-dropdown'; } elseif ('checklist' == $output_parameters[0]) { $template = 'term-list-checklist'; } } /* * Apply default arguments set in the markup template */ $arguments = MLATemplate_Support::mla_fetch_custom_template($template, 'term-list', 'markup', 'arguments'); if (!empty($arguments)) { $attr = wp_parse_args($attr, self::_validate_attributes(array(), $arguments)); } /* * Adjust data selection arguments; remove pagination-specific arguments */ unset($attr['limit']); unset($attr['offset']); /* * Look for page-level, 'request:' and 'query:' substitution parameters, * which can be added to any input parameter */ foreach ($attr as $attr_key => $attr_value) { /* * item-specific Display Content parameters must be evaluated * later, when all of the information is available. */ if (array_key_exists($attr_key, self::$term_list_item_specific_arguments)) { continue; } $attr_value = str_replace('{+', '[+', str_replace('+}', '+]', $attr_value)); $replacement_values = MLAData::mla_expand_field_level_parameters($attr_value, $attr, $page_values); $attr[$attr_key] = MLAData::mla_parse_template($attr_value, $replacement_values); } $attr = apply_filters('mla_term_list_attributes', $attr); $arguments = shortcode_atts($defaults, $attr); /* * $mla_item_parameter, if non-default, doesn't make it through the shortcode_atts * filter, so we handle it separately */ if (!isset($arguments[$mla_item_parameter])) { if (isset($attr[$mla_item_parameter])) { $arguments[$mla_item_parameter] = $attr[$mla_item_parameter]; } else { $arguments[$mla_item_parameter] = $defaults['current_item']; } } /* * Clean up the current_item(s) to separate term_id from slug */ if (!empty($arguments[$mla_item_parameter])) { if (is_string($arguments[$mla_item_parameter])) { $arguments[$mla_item_parameter] = explode(',', $arguments[$mla_item_parameter]); } foreach ($arguments[$mla_item_parameter] as $index => $value) { if (ctype_digit($value)) { $arguments[$mla_item_parameter][$index] = absint($value); } } } $arguments = apply_filters('mla_term_list_arguments', $arguments); self::$mla_debug = !empty($arguments['mla_debug']) ? trim(strtolower($arguments['mla_debug'])) : false; if (self::$mla_debug) { if ('true' == self::$mla_debug) { MLACore::mla_debug_mode('buffer'); } elseif ('log' == self::$mla_debug) { MLACore::mla_debug_mode('log'); } else { self::$mla_debug = false; } } if (self::$mla_debug) { MLACore::mla_debug_add('<strong>' . __('mla_debug attributes', 'media-library-assistant') . '</strong> = ' . var_export($attr, true)); MLACore::mla_debug_add('<strong>' . __('mla_debug arguments', 'media-library-assistant') . '</strong> = ' . var_export($arguments, true)); } /* * Determine output type and templates */ $output_parameters = array_map('strtolower', array_map('trim', explode(',', $arguments['mla_output']))); if ($is_list = in_array($output_parameters[0], array('list', 'ulist', 'olist', 'dlist'))) { $default_style = 'none'; if ('list' == $output_parameters[0] && 'dd' == $arguments['captiontag']) { $default_markup = 'term-list-dl'; $arguments['itemtag'] = 'dl'; $arguments['termtag'] = 'dt'; } else { $default_markup = 'term-list-ul'; $arguments['termtag'] = 'li'; $arguments['captiontag'] = ''; switch ($output_parameters[0]) { case 'ulist': $arguments['itemtag'] = 'ul'; break; case 'olist': $arguments['itemtag'] = 'ol'; break; case 'dlist': $default_markup = 'term-list-dl'; $arguments['itemtag'] = 'dl'; $arguments['termtag'] = 'dt'; $arguments['captiontag'] = 'dd'; break; default: $arguments['itemtag'] = 'ul'; } } if (NULL == $arguments['mla_style']) { $arguments['mla_style'] = $default_style; } if (NULL == $arguments['mla_markup']) { $arguments['mla_markup'] = $default_markup; } } if ($is_dropdown = 'dropdown' == $output_parameters[0]) { $default_style = 'none'; $default_markup = 'term-list-dropdown'; $arguments['itemtag'] = 'select'; $arguments['termtag'] = 'option'; if (NULL == $arguments['mla_style']) { $arguments['mla_style'] = $default_style; } if (NULL == $arguments['mla_markup']) { $arguments['mla_markup'] = $default_markup; } } if ($is_checklist = 'checklist' == $output_parameters[0]) { $default_style = 'none'; $default_markup = 'term-list-checklist'; $arguments['termtag'] = 'li'; if (NULL == $arguments['mla_style']) { $arguments['mla_style'] = $default_style; } if (NULL == $arguments['mla_markup']) { $arguments['mla_markup'] = $default_markup; } } $is_hierarchical = !empty($arguments['hierarchical']) && 'true' == strtolower($arguments['hierarchical']); /* * Convert lists to arrays */ if (is_string($arguments['taxonomy'])) { $arguments['taxonomy'] = explode(',', $arguments['taxonomy']); } if (is_string($arguments['post_type'])) { $arguments['post_type'] = explode(',', $arguments['post_type']); } if (is_string($arguments['post_status'])) { $arguments['post_status'] = explode(',', $arguments['post_status']); } // Hierarchical exclude is done in _get_term_tree to exclude children if ($is_hierarchical && isset($arguments['exclude'])) { $exclude_later = $arguments['exclude']; unset($arguments['exclude']); } else { $exclude_later = NULL; } $tags = self::mla_get_terms($arguments); if (!empty($exclude_later)) { $arguments['exclude'] = $exclude_later; } /* * Invalid taxonomy names return WP_Error */ if (is_wp_error($tags)) { $list = '<strong>' . __('ERROR', 'media-library-assistant') . ': ' . $tags->get_error_message() . '</strong>, ' . $tags->get_error_data($tags->get_error_code()); if ('array' == $arguments['mla_output']) { return array($list); } if (empty($arguments['echo'])) { return $list; } echo $list; return; } /* * Fill in the item_specific link properties, calculate list parameters */ if (isset($tags['found_rows'])) { $found_rows = $tags['found_rows']; unset($tags['found_rows']); } else { $found_rows = count($tags); } $show_empty = false; if (0 == $found_rows) { if (self::$mla_debug) { MLACore::mla_debug_add('<strong>' . __('mla_debug empty list', 'media-library-assistant') . '</strong>, query = ' . var_export($arguments, true)); $list = MLACore::mla_debug_flush(); if ('<p></p>' == $list) { $list = ''; } } else { $list = ''; } if ('array' == $arguments['mla_output']) { $list .= $arguments['mla_nolink_text']; if (empty($list)) { return array(); } else { return array($list); } } $show_empty = empty($arguments['hide_if_empty']) || 'true' !== strtolower($arguments['hide_if_empty']); if (($is_checklist || $is_dropdown) && $show_empty) { if (empty($arguments['option_none_text'])) { $arguments['option_none_text'] = __('no-terms', 'media-library-assistant'); } $tags[0] = (object) array('term_id' => $arguments['option_none_value'], 'name' => $arguments['option_none_text'], 'slug' => sanitize_title($arguments['option_none_text']), 'term_group' => '0', 'term_taxonomy_id' => $arguments['option_none_value'], 'taxonomy' => current($arguments['taxonomy']), 'description' => '', 'parent' => '0', 'count' => 0, 'level' => 0, 'edit_link' => '', 'term_link' => '', 'link' => ''); $is_hierarchical = false; $found_rows = 1; } else { $list .= $arguments['mla_nolink_text']; if (empty($arguments['echo'])) { return $list; } echo $list; return; } } if (self::$mla_debug) { $list = MLACore::mla_debug_flush(); } else { $list = ''; } if ($is_hierarchical) { $tags = self::_get_term_tree($tags, $arguments); if (is_wp_error($tags)) { $list = '<strong>' . __('ERROR', 'media-library-assistant') . ': ' . $tags->get_error_message() . '</strong>, ' . $tags->get_error_data($tags->get_error_code()); if ('array' == $arguments['mla_output']) { return array($list); } if (empty($arguments['echo'])) { return $list; } echo $list; return; } if (isset($tags['found_rows'])) { $found_rows = $tags['found_rows']; unset($tags['found_rows']); } else { $found_rows = count($tags); } } else { if (!$show_empty) { foreach ($tags as $key => $tag) { $tags[$key]->level = 0; $link = get_edit_tag_link($tag->term_id, $tag->taxonomy); if (!is_wp_error($link)) { $tags[$key]->edit_link = $link; $link = get_term_link(intval($tag->term_id), $tag->taxonomy); $tags[$key]->term_link = $link; } if (is_wp_error($link)) { $list = '<strong>' . __('ERROR', 'media-library-assistant') . ': ' . $link->get_error_message() . '</strong>, ' . $link->get_error_data($link->get_error_code()); if ('array' == $arguments['mla_output']) { return array($list); } if (empty($arguments['echo'])) { return $list; } echo $list; return; } if ('edit' == $arguments['link']) { $tags[$key]->link = $tags[$key]->edit_link; } else { $tags[$key]->link = $tags[$key]->term_link; } } // foreach tag } } /* * Add the optional 'all-terms' option, if requested */ if (($is_checklist || $is_dropdown) && !empty($arguments['option_all_text']) && !$show_empty) { $option_all = (object) array('term_id' => $arguments['option_all_value'], 'name' => $arguments['option_all_text'], 'slug' => sanitize_title($arguments['option_all_text']), 'term_group' => '0', 'term_taxonomy_id' => $arguments['option_all_value'], 'taxonomy' => current($arguments['taxonomy']), 'description' => '', 'parent' => '0', 'count' => -1, 'level' => 0, 'edit_link' => '', 'term_link' => '', 'link' => ''); array_unshift($tags[$option_all->taxonomy], $option_all); $found_rows += 1; } $style_values = array_merge($page_values, array('mla_output' => $arguments['mla_output'], 'mla_style' => $arguments['mla_style'], 'mla_markup' => $arguments['mla_markup'], 'taxonomy' => implode('-', $arguments['taxonomy']), 'current_item' => $arguments['current_item'], 'itemtag' => tag_escape($arguments['itemtag']), 'termtag' => tag_escape($arguments['termtag']), 'captiontag' => tag_escape($arguments['captiontag']), 'itemtag_attributes' => '', 'itemtag_class' => 'term-list term-list-taxonomy-' . implode('-', $arguments['taxonomy']), 'itemtag_id' => $page_values['selector'], 'all_found_rows' => $found_rows, 'found_rows' => $found_rows, 'separator' => $arguments['separator'], 'single_text' => $arguments['single_text'], 'multiple_text' => $arguments['multiple_text'], 'echo' => $arguments['echo'], 'link' => $arguments['link'])); $style_template = $gallery_style = ''; $use_mla_term_list_style = $is_list && 'none' != strtolower($style_values['mla_style']); if (apply_filters('use_mla_term_list_style', $use_mla_term_list_style, $style_values['mla_style'])) { $style_template = MLATemplate_support::mla_fetch_custom_template($style_values['mla_style'], 'term-list', 'style'); if (empty($style_template)) { $style_values['mla_style'] = $default_style; $style_template = MLATemplate_support::mla_fetch_custom_template($default_style, 'term-list', 'style'); } if (!empty($style_template)) { /* * Look for 'query' and 'request' substitution parameters */ $style_values = MLAData::mla_expand_field_level_parameters($style_template, $attr, $style_values); $style_values = apply_filters('mla_term_list_style_values', $style_values); $style_template = apply_filters('mla_term_list_style_template', $style_template); $gallery_style = MLAData::mla_parse_template($style_template, $style_values); $gallery_style = apply_filters('mla_term_list_style_parse', $gallery_style, $style_template, $style_values); } // !empty template } // use_mla_term_list_style $list .= $gallery_style; $markup_values = $style_values; /* * Accumulate links for flat and array output */ $tag_links = array(); if ($is_hierarchical) { foreach ($tags as $taxonomy => $root_terms) { if (isset($root_terms['found_rows'])) { $markup_values['found_rows'] = $root_terms['found_rows']; unset($root_terms['found_rows']); } else { $markup_values['found_rows'] = count($root_terms); } self::_compose_term_list($list, $tag_links, $root_terms, $markup_values, $arguments, $attr); } } else { self::_compose_term_list($list, $tag_links, $tags, $markup_values, $arguments, $attr); } if ('array' == $arguments['mla_output'] || empty($arguments['echo'])) { return $list; } echo $list; }