/** * Outputs the widget with the selected settings * * @since 1.0.0 */ public function widget($args, $instance) { extract($args); $title = apply_filters('widget_title', empty($instance['title']) ? '' : $instance['title'], $instance, $this->id_base); $clear_all = strip_tags($instance['clear_all']); $hide_empty = strip_tags($instance['hide_empty']); $show_count = strip_tags($instance['show_count']); $post_type = strip_tags($instance['post_type']); $dropdown_behaviour = strip_tags($instance['dropdown_behaviour']); $activated_post_types = apply_filters('beautiful_filters_post_types', get_option('beautiful_taxonomy_filters_post_types')); $disable_select2 = get_option('beautiful_taxonomy_filters_disable_select2') ? get_option('beautiful_taxonomy_filters_disable_select2') : false; //Make sure we find the current post type! if ($post_type == 'automatic') { $current_post_type = Beautiful_Taxonomy_Filters_Public::get_current_posttype(false); $current_post_type_rewrite = Beautiful_Taxonomy_Filters_Public::get_current_posttype(true); } else { $current_post_type = $post_type; //Get the post type object $post_type_object = get_post_type_object($current_post_type); //Return the rewrite slug which is the one we actually want! $current_post_type_rewrite = $post_type_object->rewrite['slug']; } //If there is no current post type, bail early! if (!is_array($activated_post_types) || !$current_post_type || !in_array($current_post_type, $activated_post_types)) { return; } //Get the taxonomies of the current post type and the excluded taxonomies $excluded_taxonomies = apply_filters('beautiful_filters_taxonomies', get_option('beautiful_taxonomy_filters_taxonomies')); //Also make sure we don't try to output the builtin taxonomies since they cannot be supported if (is_array($excluded_taxonomies)) { array_push($excluded_taxonomies, 'category', 'post_tag', 'post_format'); } else { $excluded_taxonomies = array('category', 'post_tag', 'post_format'); } //Polylang support if (function_exists('pll_current_language')) { array_push($excluded_taxonomies, 'language', 'post_translations'); } $current_taxonomies = get_object_taxonomies($current_post_type, 'objects'); //If we both have taxonomies on the post type AND we've set som excluded taxonomies in the plugins settings. Loop through them and unset those we don't want! if ($current_taxonomies && $excluded_taxonomies) { foreach ($current_taxonomies as $key => $value) { if (in_array($key, $excluded_taxonomies)) { unset($current_taxonomies[$key]); } } } //Fetch the available settings for the filter modules behaviour if ($clear_all == 'inherit') { $clear_all = apply_filters('beautiful_filters_clear_all', get_option('beautiful_taxonomy_filters_clear_all'), $current_post_type); } else { $clear_all = $clear_all == 'enable' ? 1 : 0; $clear_all = apply_filters('beautiful_filters_clear_all', $clear_all, $current_post_type); } if ($hide_empty == 'inherit') { $hide_empty = apply_filters('beautiful_filters_hide_empty', get_option('beautiful_taxonomy_filters_hide_empty'), $current_post_type); } else { $hide_empty = $hide_empty == 'enable' ? 1 : 0; $hide_empty = apply_filters('beautiful_filters_hide_empty', $hide_empty, $current_post_type); } if ($show_count == 'inherit') { $show_count = apply_filters('beautiful_filters_show_count', get_option('beautiful_taxonomy_filters_show_count'), $current_post_type); } else { $show_count = $show_count == 'enable' ? 1 : 0; $show_count = apply_filters('beautiful_filters_show_count', $show_count, $current_post_type); } if ($dropdown_behaviour == 'inherit') { $dropdown_behaviour = apply_filters('beautiful_filters_dropdown_behaviour', get_option('beautiful_taxonomy_filters_dropdown_behaviour'), $current_post_type); } else { $dropdown_behaviour = $dropdown_behaviour == 'enable' ? 1 : 0; $dropdown_behaviour = apply_filters('beautiful_filters_dropdown_behaviour', $dropdown_behaviour, $current_post_type); } /* * The content of the widget */ echo $before_widget; if (!empty($title)) { echo $before_title . $title . $after_title; } ?> <div class="beautiful-taxonomy-filters-widget" id="beautiful-taxonomy-filters-<?php echo $current_post_type; ?> "> <?php do_action('beautiful_actions_before_form', $current_post_type); //Allow custom markup before form ?> <form method="POST" class="clearfix" id="beautiful-taxonomy-filters-form"> <input type="hidden" name="site-url" value="<?php echo get_bloginfo('url'); ?> " /> <input type="hidden" name="post_type_rewrite" value="<?php echo $current_post_type_rewrite; ?> " /> <input type="hidden" name="post_type" value="<?php echo $current_post_type; ?> " /> <?php wp_nonce_field('Beutiful-taxonomy-filters-do-filter', 'btf_do_filtering_nonce'); ?> <?php do_action('beautiful_actions_beginning_form', $current_post_type); //allow custom markup at beginning of form ?> <?php //Loop through the taxonomies and output their terms in a select dropdown $count = count($current_taxonomies); $taxonomies_ordered = apply_filters('beautiful_filters_taxonomy_order', array_keys($current_taxonomies), $current_post_type); ?> <div class="beautiful-taxonomy-filters-select-wrap clearfix"> <?php do_action('beautiful_actions_beginning_form_inner', $current_post_type); //allow custom markup at beginning of form ?> <?php foreach ($taxonomies_ordered as $key) { ?> <?php $taxonomy = $current_taxonomies[$key]; $terms = get_terms($key); ?> <?php if (!empty($terms) && !is_wp_error($terms)) { ?> <div class="beautiful-taxonomy-filters-tax filter-count-<?php echo $count; if ($count > 5) { echo ' filter-count-many'; } ?> " id="beautiful-taxonomy-filters-tax-<?php echo $key; ?> "> <label for="select-<?php echo $key; ?> " class="beautiful-taxonomy-filters-label"><?php echo apply_filters('beautiful_filters_taxonomy_label', $taxonomy->labels->name, $taxonomy->name); ?> </label> <?php /** * Output the dropdown with the terms of the taxonomy. * Uses walker found in: public/class-beautiful-taxonomy-filters-walker.php */ $dropdown_args = array('show_option_all' => __('All ', 'beautiful-taxonomy-filters') . $taxonomy->labels->name, 'taxonomy' => $key, 'name' => 'select-' . $key, 'show_count' => $show_count, 'hide_empty' => $hide_empty, 'orderby' => apply_filters('beautiful_filters_dropdown_orderby', 'name', $key), 'order' => apply_filters('beautiful_filters_dropdown_order', 'ASC', $key), 'hierarchical' => true, 'echo' => 0, 'class' => 'beautiful-taxonomy-filters-select', 'walker' => new Walker_Slug_Value_Category_Dropdown()); //Apply filter on the arguments to let users modify them first! $dropdown_args = apply_filters('beautiful_filters_dropdown_categories', $dropdown_args, $taxonomy->name); //But if they've selected placeholder we cant use the show_option_all if (!$disable_select2 && $dropdown_behaviour == 'show_placeholder_option') { $dropdown_args['show_option_all'] = ' '; } //create the dropdown $filterdropdown = wp_dropdown_categories($dropdown_args); //If they didnt select placeholder just output the dropdown now if ($disable_select2 || !$dropdown_behaviour || $dropdown_behaviour == 'show_all_option') { echo $filterdropdown; } else { //They selected placeholder so now we need to choose what to display and then alter the dropdown before output. $new_label = apply_filters('beautiful_filters_dropdown_placeholder', __('All ', 'beautiful-taxonomy-filters') . $taxonomy->labels->name, $taxonomy->name); $filterdropdown = str_replace("value='0' selected='selected'", "", $filterdropdown); echo str_replace('<select ', '<select data-placeholder="' . $new_label . '"', $filterdropdown); } ?> </div> <?php } ?> <?php } ?> <?php do_action('beautiful_actions_ending_form_inner', $current_post_type); //allow custom markup at end of inner form ?> </div> <?php do_action('beautiful_actions_before_submit_button', $current_post_type); //allow custom markup before submit button ?> <button type="submit" class="beautiful-taxonomy-filters-button"><?php echo apply_filters('beautiful_filters_apply_button', __('Apply filter', 'beautiful-taxonomy-filters')); ?> </button> <?php if ($clear_all) { ?> <a href="<?php echo get_post_type_archive_link($current_post_type); ?> " class="beautiful-taxonomy-filters-clear-all" title="<?php _e('Click to clear all active filters', 'beautiful-taxonomy-filters'); ?> "><?php echo apply_filters('beautiful_filters_clear_button', __('Clear all', 'beautiful-taxonomy-filters')); ?> </a> <?php } ?> <?php do_action('beautiful_actions_ending_form', $current_post_type); //allow custom markup at beginning of form ?> </form> <?php do_action('beautiful_actions_after_form', $current_post_type); //Allow custom markup after form ?> </div> <?php echo $after_widget; }
/** * Template tag for displaying the active filters info * @return html object */ function show_beautiful_filters_info() { return Beautiful_Taxonomy_Filters_Public::beautiful_filters_info(); }
/** * Outputs the widget with the selected settings * * @since 1.0.0 */ public function widget($args, $instance) { extract($args); $title = apply_filters('widget_title', empty($instance['title']) ? '' : $instance['title'], $instance, $this->id_base); global $wp_query; if (!empty($wp_query->tax_query->queries)) { $current_taxonomies = $wp_query->tax_query->queries; } else { $current_taxonomies = false; } $hide_postcount = apply_filters('beautiful_filters_disable_postcount', get_option('beautiful_taxonomy_filters_disable_postcount')); $activated_post_types = apply_filters('beautiful_filters_post_types', get_option('beautiful_taxonomy_filters_post_types')); $current_post_type = Beautiful_Taxonomy_Filters_Public::get_current_posttype(false); //If there is no current post type, bail early! if (!is_array($activated_post_types) || !$current_post_type || !in_array($current_post_type, $activated_post_types)) { return; } /* * The content of the widget */ echo $before_widget; if (!empty($title)) { echo $before_title . $title . $after_title; } ?> <div class="beautiful-taxonomy-filters-active-filter-widget"> <?php if (!$hide_postcount) { ?> <p class="beautiful-taxonomy-filters-postcount"><?php echo apply_filters('beautiful_filters_info_postcount', sprintf(__('Result of filter: %d', 'beautiful-taxonomy-filters'), $wp_query->found_posts)); ?> </p> <?php } ?> <?php $posttypes_taxonomies = get_object_taxonomies($current_post_type, 'objects'); ?> <?php if ($current_taxonomies) { ?> <?php //Get the taxonomies of the current post type and the excluded taxonomies $excluded_taxonomies = apply_filters('beautiful_filters_taxonomies', get_option('beautiful_taxonomy_filters_taxonomies')); //Also make sure we don't try to output the builtin taxonomies since they cannot be supported if (is_array($excluded_taxonomies)) { array_push($excluded_taxonomies, 'category', 'post_tag', 'post_format'); } else { $excluded_taxonomies = array('category', 'post_tag', 'post_format'); } //Polylang support if (function_exists('pll_current_language')) { array_push($excluded_taxonomies, 'language', 'post_translations'); } //If we both have taxonomies on the post type AND we've set som excluded taxonomies in the plugins settings. Loop through them and unset those we don't want! if ($current_taxonomies && $excluded_taxonomies) { foreach ($current_taxonomies as $key => $value) { if (in_array($value['taxonomy'], $excluded_taxonomies)) { unset($current_taxonomies[$key]); } } } foreach ($posttypes_taxonomies as $key => $value) { if (in_array($key, $excluded_taxonomies)) { unset($posttypes_taxonomies[$key]); } } ?> <?php foreach ($current_taxonomies as $taxonomy) { ?> <?php if (array_key_exists($taxonomy['taxonomy'], $posttypes_taxonomies)) { unset($posttypes_taxonomies[$taxonomy['taxonomy']]); } ?> <div class="beautiful-taxonomy-filters-single-tax"> <?php //get the taxonomy object $taxonomy_info = get_taxonomy($taxonomy['taxonomy']); //Get the terms objects $terms = get_terms($taxonomy['taxonomy']); //setup an empty array for the actual terms we want. $active_terms = array(); if (!is_wp_error($terms)) { foreach ($terms as $term) { //If the term slugs matches, put it in the array! if (in_array($term->slug, $taxonomy['terms'])) { $active_terms[$term->term_id] = $term->name; } } } //Implode that sh**t! $imploded_terms = implode(', ', $active_terms); $label = $taxonomy_info->labels->name . ':'; ?> <span class="single-tax-key"><?php echo apply_filters('beautiful_filters_active_taxonomy', $label, $taxonomy['taxonomy']); ?> </span> <span class="single-tax-value"><?php echo apply_filters('beautiful_filters_active_terms', $imploded_terms, $taxonomy['taxonomy']); ?> </span> </div> <?php } ?> <?php if (!empty($posttypes_taxonomies)) { foreach ($posttypes_taxonomies as $taxonomy) { ?> <div class="beautiful-taxonomy-filters-single-tax"> <?php $label = $taxonomy->labels->name . ':'; $value = $taxonomy->labels->all_items; ?> <span class="single-tax-key"><?php echo apply_filters('beautiful_filters_active_taxonomy', $label, $taxonomy->query_var); ?> </span> <span class="single-tax-value"><?php echo apply_filters('beautiful_filters_active_terms', $value, $taxonomy->query_var); ?> </span> </div> <?php } } ?> <?php } else { ?> <?php //Get the taxonomies of the current post type and the excluded taxonomies $excluded_taxonomies = apply_filters('beautiful_filters_taxonomies', get_option('beautiful_taxonomy_filters_taxonomies')); if (is_array($excluded_taxonomies)) { array_push($excluded_taxonomies, 'category', 'post_tag', 'post_format'); } else { $excluded_taxonomies = array('category', 'post_tag', 'post_format'); } //Polylang support if (function_exists('pll_current_language')) { array_push($excluded_taxonomies, 'language', 'post_translations'); } //If we both have taxonomies on the post type AND we've set som excluded taxonomies in the plugins settings. Loop through them and unset those we don't want! if ($posttypes_taxonomies && $excluded_taxonomies) { foreach ($posttypes_taxonomies as $key => $value) { if (in_array($key, $excluded_taxonomies)) { unset($posttypes_taxonomies[$key]); } } } ?> <?php if ($posttypes_taxonomies) { ?> <?php foreach ($posttypes_taxonomies as $taxonomy) { ?> <div class="beautiful-taxonomy-filters-single-tax"> <?php $label = $taxonomy->labels->name . ':'; $value = $taxonomy->labels->all_items; ?> <span class="single-tax-key"><?php echo apply_filters('beautiful_filters_active_taxonomy', $label, $taxonomy->query_var); ?> </span> <span class="single-tax-value"><?php echo apply_filters('beautiful_filters_active_terms', $value, $taxonomy->query_var); ?> </span> </div> <?php } ?> <?php } ?> <?php } ?> </div> <?php echo $after_widget; }
/** * Start the element output. * * @see Walker::start_el() * @since 2.1.0 * * @param string $output Passed by reference. Used to append additional content. * @param object $category Category data object. * @param int $depth Depth of category. Used for padding. * @param array $args Uses 'selected', 'show_count', and 'value_field' keys, if they exist. * See {@see wp_dropdown_categories()}. */ function start_el(&$output, $category, $depth = 0, $args = array(), $id = 0) { global $wp_query; $queryvars = $wp_query->query_vars; $cat_name = apply_filters('list_cats', $category->name, $category); $output .= "\t" . '<option class="level-' . $depth . ' ' . $category->slug . '" value="' . $category->slug . '"'; if (isset($_GET)) { foreach ($_GET as $get_variable) { if (strpos($get_variable, ',') !== false) { $get_array = explode(',', $get_variable); } else { $get_array[] = $get_variable; } foreach ($get_array as $get_single) { if ($category->term_id == $args['selected'] || $get_single == $category->slug) { $output .= ' selected="selected" '; } } } } if (in_array($category->slug, $queryvars, true)) { $output .= ' selected="selected" '; } $output .= '>'; //run our custom filter $output .= apply_filters('beautiful_filters_term_name', $cat_name, $category, $depth); if ($args['show_count']) { //If they want a post count make sure to only show the count for this specific post type $count = Beautiful_Taxonomy_Filters_Public::get_term_post_count_by_type($category->slug, $category->taxonomy, $this->post_type); $output .= ' (' . $count . ')'; } if (isset($args['show_last_update'])) { $format = 'Y-m-d'; $output .= ' ' . gmdate($format, $category->last_update_timestamp); } if ($this->show_description && $category->description) { //If we dont want select2 we cant put anything fancy around the description so this will have to do. if ($this->disable_select2) { $output .= ' – ' . $category->description; } else { //We just use an unlikely textstring so we can target it with JS later. $output .= ':.:' . $category->description . ':-:'; } } $output .= "</option>\n"; }
* @since 1.0.0 * * @package Beautiful_Taxonomy_Filters * @subpackage Beautiful_Taxonomy_Filters/public/partials */ /* * Filters in this file * @ beautiful_filters_active_taxonomy * @ beautiful_filters_active_terms */ $hide_heading = apply_filters('beautiful_filters_disable_heading', get_option('beautiful_taxonomy_filters_disable_heading')); $hide_postcount = apply_filters('beautiful_filters_disable_postcount', get_option('beautiful_taxonomy_filters_disable_postcount')); global $wp_query; $current_taxonomies = $wp_query->tax_query->queries; $activated_post_types = apply_filters('beautiful_filters_post_types', get_option('beautiful_taxonomy_filters_post_types')); $current_post_type = Beautiful_Taxonomy_Filters_Public::get_current_posttype(false); //If there is no current post type, bail early! if (!$current_post_type || !in_array($current_post_type, $activated_post_types)) { return; } ?> <div class="beautiful-taxonomy-filters-active-filter"> <?php do_action('beautiful_actions_beginning_filterinfo', $current_post_type); //Allow custom markup before filter info ?> <?php if (!$hide_heading) { ?> <h3 class="beautiful-taxonomy-filters-info-heading"><?php echo apply_filters('beautiful_filters_info_heading', __('Active filters', 'beautiful-taxonomy-filters'));