Files
elessi-theme/widgets/wg-nasa-tag-cloud.php
T

193 lines
7.1 KiB
PHP

<?php
defined('ABSPATH') or die(); // Exit if accessed directly
/**
* Register Widget
*/
add_action('widgets_init', 'elessi_tag_cloud_widget');
function elessi_tag_cloud_widget() {
register_widget('Elessi_Widget_Tag_Cloud');
}
/**
* Tags Cloud Widget
*/
class Elessi_Widget_Tag_Cloud extends WP_Widget {
/**
* Sets up a new Ace Tag Cloud widget instance.
*/
public function __construct() {
$widget_ops = array(
'description' => __('A cloud of your most used tags.', 'elessi-theme'),
'customize_selective_refresh' => true,
'title' => __('Tags', 'elessi-theme'),
'show_items' => 'All'
);
parent::__construct('nasa_tag_cloud', 'Nasa - Tag Cloud', $widget_ops);
}
/**
* @param array $args
* @param array $instance
*/
public function widget($args, $instance) {
$class = 'tagcloud';
if (isset($instance['taxonomy']) && in_array($instance['taxonomy'], array('product_cat', 'product_tag'))) {
$class .= ' nasa-tag-cloud';
$class .= $instance['taxonomy'] == 'product_tag' ? ' nasa-tag-products-cloud' : '';
}
$current_taxonomy = $this->_get_current_taxonomy($instance);
$title_widget = !empty($instance['title']) ? $instance['title'] : ('post_tag' == $current_taxonomy ? esc_html__('Tags', 'elessi-theme') : get_taxonomy($current_taxonomy)->labels->name);
/** This filter is documented in wp-includes/default-widgets.php */
$title = apply_filters('widget_title', $title_widget, $instance, $this->id_base);
echo $args['before_widget'];
echo $title ? $args['before_title'] . $title . $args['after_title'] : '';
echo '<div class="' . $class . '">';
$show_items = isset($instance['show_items']) ? (int) $instance['show_items'] : 0;
$tags = wp_tag_cloud(apply_filters('widget_tag_cloud_args', array(
'taxonomy' => $current_taxonomy,
'format' => 'array'
)));
if ($tags) {
echo '<ul class="nasa-tag-cloud-ul">';
foreach ($tags as $k => $tag) {
$class_li = ($show_items && $k+1 > $show_items) ? ' class="nasa-show-less"' : '';
echo '<li' . $class_li . '>' . $tag . '</li>';
}
if ($show_items) {
echo
'<li class="nasa_show_manual" data-delay="500" data-fadein="1">' .
'<a data-show="1" class="nasa-show" href="javascript:void(0);" data-text="' . esc_attr__('- Show less', 'elessi-theme') . '" rel="nofollow">' .
esc_html__('+ Show more', 'elessi-theme') .
'</a>' .
'</li>';
}
echo '</ul>';
}
echo "</div>\n";
echo $args['after_widget'];
}
/**
* Handles updating settings for the current Tag Cloud widget instance.
*
* @since 2.8.0
* @access public
*
* @param array $new_instance New settings for this instance as input by the user via
* WP_Widget::form().
* @param array $old_instance Old settings for this instance.
* @return array Settings to save or bool false to cancel saving.
*/
public function update($new_instance, $old_instance) {
$instance = array();
$instance['title'] = sanitize_text_field($new_instance['title']);
$instance['taxonomy'] = stripslashes($new_instance['taxonomy']);
$instance['show_items'] = sanitize_text_field($new_instance['show_items']);
return $instance;
}
/**
* Outputs the Tag Cloud widget settings form.
*
* @since 2.8.0
* @access public
*
* @param array $instance Current settings.
*/
public function form($instance) {
$current_taxonomy = $this->_get_current_taxonomy($instance);
$title_id = esc_attr($this->get_field_id('title'));
$title = isset($instance['title']) ? esc_attr($instance['title']) : '';
echo
'<p>' .
'<label for="' . $title_id . '">' . esc_html__('Title:', 'elessi-theme') . '</label>' .
'<input type="text" class="widefat" id="' . $title_id . '" name="' . esc_attr($this->get_field_name('title')) . '" value="' . $title . '" />' .
'</p>';
$taxonomies = get_taxonomies(array('show_tagcloud' => true), 'object');
$id = esc_attr($this->get_field_id('taxonomy'));
$name = esc_attr($this->get_field_name('taxonomy'));
$input = '<input type="hidden" id="' . $id . '" name="' . $name . '" value="%s" />';
switch (count($taxonomies)) {
// No tag cloud supporting taxonomies found, display error message
case 0:
echo '<p>' . esc_html__('The tag cloud will not be displayed since there are no taxonomies that support the tag cloud widget.', 'elessi-theme') . '</p>';
printf($input, '');
break;
// Just a single tag cloud supporting taxonomy found, no need to display options
case 1:
$keys = array_keys($taxonomies);
$taxonomy = reset($keys);
printf($input, esc_attr($taxonomy));
break;
// More than one tag cloud supporting taxonomy found, display options
default:
printf(
'<p><label for="%1$s">%2$s</label><select class="widefat" id="%1$s" name="%3$s">',
$id,
esc_html__('Taxonomy:', 'elessi-theme'),
$name
);
foreach ($taxonomies as $taxonomy => $tax) {
printf(
'<option value="%s"%s>%s</option>',
esc_attr($taxonomy),
selected($taxonomy, $current_taxonomy, false),
$tax->labels->name
);
}
echo '</select></p>';
}
$show_items = $this->get_field_id('show_items');
$val_show = (isset($instance['show_items']) && is_numeric($instance['show_items']) ? $instance['show_items'] : esc_attr__('All', 'elessi-theme'));
echo
'<p>' .
'<label for="' . esc_attr($show_items) . '">' . esc_html__('Show items (0 ~ All)', 'elessi-theme') . '</label>' .
'<input type="text" class="widefat" id="' . esc_attr($show_items) . '" name="' . esc_attr($this->get_field_name('show_items')) . '" value="' . $val_show . '" />' .
'</p>';
}
/**
* Retrieves the taxonomy for the current Tag cloud widget instance.
*
* @since 4.4.0
* @access public
*
* @param array $instance Current settings.
* @return string Name of the current taxonomy if set, otherwise 'post_tag'.
*/
public function _get_current_taxonomy($instance) {
if (!empty($instance['taxonomy']) && taxonomy_exists($instance['taxonomy'])) {
return $instance['taxonomy'];
}
return 'post_tag';
}
}