File manager - Edit - /home2/zetasolve/poss.shayantraders.com/wp-admin/widgets.zip
Back
PK �V�\g�tfS fS class-wp-widget-text.phpnu �[��� <?php /** * Widget API: WP_Widget_Text class * * @package WordPress * @subpackage Widgets * @since 4.4.0 */ /** * Core class used to implement a Text widget. * * @since 2.8.0 * * @see WP_Widget */ class WP_Widget_Text extends WP_Widget { /** * Whether or not the widget has been registered yet. * * @since 4.8.1 * @var bool */ protected $registered = false; /** * Sets up a new Text widget instance. * * @since 2.8.0 */ public function __construct() { $widget_ops = array( 'classname' => 'widget_text', 'description' => __( 'Arbitrary text.' ), 'customize_selective_refresh' => true, 'show_instance_in_rest' => true, ); $control_ops = array( 'width' => 400, 'height' => 350, ); parent::__construct( 'text', __( 'Text' ), $widget_ops, $control_ops ); } /** * Adds hooks for enqueueing assets when registering all widget instances of this widget class. * * @param int $number Optional. The unique order number of this widget instance * compared to other instances of the same class. Default -1. */ public function _register_one( $number = -1 ) { parent::_register_one( $number ); if ( $this->registered ) { return; } $this->registered = true; if ( $this->is_preview() ) { add_action( 'wp_enqueue_scripts', array( $this, 'enqueue_preview_scripts' ) ); } /* * Note that the widgets component in the customizer will also do * the 'admin_print_scripts-widgets.php' action in WP_Customize_Widgets::print_scripts(). */ add_action( 'admin_print_scripts-widgets.php', array( $this, 'enqueue_admin_scripts' ) ); /* * Note that the widgets component in the customizer will also do * the 'admin_footer-widgets.php' action in WP_Customize_Widgets::print_footer_scripts(). */ add_action( 'admin_footer-widgets.php', array( 'WP_Widget_Text', 'render_control_template_scripts' ) ); } /** * Determines whether a given instance is legacy and should bypass using TinyMCE. * * @since 4.8.1 * * @param array $instance { * Instance data. * * @type string $text Content. * @type bool|string $filter Whether autop or content filters should apply. * @type bool $legacy Whether widget is in legacy mode. * } * @return bool Whether Text widget instance contains legacy data. */ public function is_legacy_instance( $instance ) { // Legacy mode when not in visual mode. if ( isset( $instance['visual'] ) ) { return ! $instance['visual']; } // Or, the widget has been added/updated in 4.8.0 then filter prop is 'content' and it is no longer legacy. if ( isset( $instance['filter'] ) && 'content' === $instance['filter'] ) { return false; } // If the text is empty, then nothing is preventing migration to TinyMCE. if ( empty( $instance['text'] ) ) { return false; } $wpautop = ! empty( $instance['filter'] ); $has_line_breaks = ( str_contains( trim( $instance['text'] ), "\n" ) ); // If auto-paragraphs are not enabled and there are line breaks, then ensure legacy mode. if ( ! $wpautop && $has_line_breaks ) { return true; } // If an HTML comment is present, assume legacy mode. if ( str_contains( $instance['text'], '<!--' ) ) { return true; } // In the rare case that DOMDocument is not available we cannot reliably sniff content and so we assume legacy. if ( ! class_exists( 'DOMDocument' ) ) { // @codeCoverageIgnoreStart return true; // @codeCoverageIgnoreEnd } $doc = new DOMDocument(); // Suppress warnings generated by loadHTML. $errors = libxml_use_internal_errors( true ); // phpcs:ignore WordPress.PHP.NoSilencedErrors.Discouraged @$doc->loadHTML( sprintf( '<!DOCTYPE html><html><head><meta charset="%s"></head><body>%s</body></html>', esc_attr( get_bloginfo( 'charset' ) ), $instance['text'] ) ); libxml_use_internal_errors( $errors ); $body = $doc->getElementsByTagName( 'body' )->item( 0 ); // See $allowedposttags. $safe_elements_attributes = array( 'strong' => array(), 'em' => array(), 'b' => array(), 'i' => array(), 'u' => array(), 's' => array(), 'ul' => array(), 'ol' => array(), 'li' => array(), 'hr' => array(), 'abbr' => array(), 'acronym' => array(), 'code' => array(), 'dfn' => array(), 'a' => array( 'href' => true, ), 'img' => array( 'src' => true, 'alt' => true, ), ); $safe_empty_elements = array( 'img', 'hr', 'iframe' ); foreach ( $body->getElementsByTagName( '*' ) as $element ) { /** @var DOMElement $element */ $tag_name = strtolower( $element->nodeName ); // If the element is not safe, then the instance is legacy. if ( ! isset( $safe_elements_attributes[ $tag_name ] ) ) { return true; } // If the element is not safely empty and it has empty contents, then legacy mode. if ( ! in_array( $tag_name, $safe_empty_elements, true ) && '' === trim( $element->textContent ) ) { return true; } // If an attribute is not recognized as safe, then the instance is legacy. foreach ( $element->attributes as $attribute ) { /** @var DOMAttr $attribute */ $attribute_name = strtolower( $attribute->nodeName ); if ( ! isset( $safe_elements_attributes[ $tag_name ][ $attribute_name ] ) ) { return true; } } } // Otherwise, the text contains no elements/attributes that TinyMCE could drop, and therefore the widget does not need legacy mode. return false; } /** * Filters gallery shortcode attributes. * * Prevents all of a site's attachments from being shown in a gallery displayed on a * non-singular template where a $post context is not available. * * @since 4.9.0 * * @param array $attrs Attributes. * @return array Attributes. */ public function _filter_gallery_shortcode_attrs( $attrs ) { if ( ! is_singular() && empty( $attrs['id'] ) && empty( $attrs['include'] ) ) { $attrs['id'] = -1; } return $attrs; } /** * Outputs the content for the current Text widget instance. * * @since 2.8.0 * * @global WP_Post $post Global post object. * * @param array $args Display arguments including 'before_title', 'after_title', * 'before_widget', and 'after_widget'. * @param array $instance Settings for the current Text widget instance. */ public function widget( $args, $instance ) { global $post; $title = ! empty( $instance['title'] ) ? $instance['title'] : ''; /** This filter is documented in wp-includes/widgets/class-wp-widget-pages.php */ $title = apply_filters( 'widget_title', $title, $instance, $this->id_base ); $text = ! empty( $instance['text'] ) ? $instance['text'] : ''; $is_visual_text_widget = ( ! empty( $instance['visual'] ) && ! empty( $instance['filter'] ) ); // In 4.8.0 only, visual Text widgets get filter=content, without visual prop; upgrade instance props just-in-time. if ( ! $is_visual_text_widget ) { $is_visual_text_widget = ( isset( $instance['filter'] ) && 'content' === $instance['filter'] ); } if ( $is_visual_text_widget ) { $instance['filter'] = true; $instance['visual'] = true; } /* * Suspend legacy plugin-supplied do_shortcode() for 'widget_text' filter for the visual Text widget to prevent * shortcodes being processed twice. Now do_shortcode() is added to the 'widget_text_content' filter in core itself * and it applies after wpautop() to prevent corrupting HTML output added by the shortcode. When do_shortcode() is * added to 'widget_text_content' then do_shortcode() will be manually called when in legacy mode as well. */ $widget_text_do_shortcode_priority = has_filter( 'widget_text', 'do_shortcode' ); $should_suspend_legacy_shortcode_support = ( $is_visual_text_widget && false !== $widget_text_do_shortcode_priority ); if ( $should_suspend_legacy_shortcode_support ) { remove_filter( 'widget_text', 'do_shortcode', $widget_text_do_shortcode_priority ); } // Override global $post so filters (and shortcodes) apply in a consistent context. $original_post = $post; if ( is_singular() ) { // Make sure post is always the queried object on singular queries (not from another sub-query that failed to clean up the global $post). $post = get_queried_object(); } else { // Nullify the $post global during widget rendering to prevent shortcodes from running with the unexpected context on archive queries. $post = null; } // Prevent dumping out all attachments from the media library. add_filter( 'shortcode_atts_gallery', array( $this, '_filter_gallery_shortcode_attrs' ) ); /** * Filters the content of the Text widget. * * @since 2.3.0 * @since 4.4.0 Added the `$widget` parameter. * @since 4.8.1 The `$widget` param may now be a `WP_Widget_Custom_HTML` object in addition to a `WP_Widget_Text` object. * * @param string $text The widget content. * @param array $instance Array of settings for the current widget. * @param WP_Widget_Text|WP_Widget_Custom_HTML $widget Current text or HTML widget instance. */ $text = apply_filters( 'widget_text', $text, $instance, $this ); if ( $is_visual_text_widget ) { /** * Filters the content of the Text widget to apply changes expected from the visual (TinyMCE) editor. * * By default a subset of the_content filters are applied, including wpautop and wptexturize. * * @since 4.8.0 * * @param string $text The widget content. * @param array $instance Array of settings for the current widget. * @param WP_Widget_Text $widget Current Text widget instance. */ $text = apply_filters( 'widget_text_content', $text, $instance, $this ); } else { // Now in legacy mode, add paragraphs and line breaks when checkbox is checked. if ( ! empty( $instance['filter'] ) ) { $text = wpautop( $text ); } /* * Manually do shortcodes on the content when the core-added filter is present. It is added by default * in core by adding do_shortcode() to the 'widget_text_content' filter to apply after wpautop(). * Since the legacy Text widget runs wpautop() after 'widget_text' filters are applied, the widget in * legacy mode here manually applies do_shortcode() on the content unless the default * core filter for 'widget_text_content' has been removed, or if do_shortcode() has already * been applied via a plugin adding do_shortcode() to 'widget_text' filters. */ if ( has_filter( 'widget_text_content', 'do_shortcode' ) && ! $widget_text_do_shortcode_priority ) { if ( ! empty( $instance['filter'] ) ) { $text = shortcode_unautop( $text ); } $text = do_shortcode( $text ); } } // Restore post global. $post = $original_post; remove_filter( 'shortcode_atts_gallery', array( $this, '_filter_gallery_shortcode_attrs' ) ); // Undo suspension of legacy plugin-supplied shortcode handling. if ( $should_suspend_legacy_shortcode_support ) { add_filter( 'widget_text', 'do_shortcode', $widget_text_do_shortcode_priority ); } echo $args['before_widget']; if ( ! empty( $title ) ) { echo $args['before_title'] . $title . $args['after_title']; } $text = preg_replace_callback( '#<(video|iframe|object|embed)\s[^>]*>#i', array( $this, 'inject_video_max_width_style' ), $text ); ?> <div class="textwidget"><?php echo $text; ?></div> <?php echo $args['after_widget']; } /** * Injects max-width and removes height for videos too constrained to fit inside sidebars on frontend. * * @since 4.9.0 * * @see WP_Widget_Media_Video::inject_video_max_width_style() * * @param array $matches Pattern matches from preg_replace_callback. * @return string HTML Output. */ public function inject_video_max_width_style( $matches ) { $html = $matches[0]; $html = preg_replace( '/\sheight="\d+"/', '', $html ); $html = preg_replace( '/\swidth="\d+"/', '', $html ); $html = preg_replace( '/(?<=width:)\s*\d+px(?=;?)/', '100%', $html ); return $html; } /** * Handles updating settings for the current Text widget instance. * * @since 2.8.0 * * @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 ) { $new_instance = wp_parse_args( $new_instance, array( 'title' => '', 'text' => '', 'filter' => false, // For back-compat. 'visual' => null, // Must be explicitly defined. ) ); $instance = $old_instance; $instance['title'] = sanitize_text_field( $new_instance['title'] ); if ( current_user_can( 'unfiltered_html' ) ) { $instance['text'] = $new_instance['text']; } else { $instance['text'] = wp_kses_post( $new_instance['text'] ); } $instance['filter'] = ! empty( $new_instance['filter'] ); // Upgrade 4.8.0 format. if ( isset( $old_instance['filter'] ) && 'content' === $old_instance['filter'] ) { $instance['visual'] = true; } if ( 'content' === $new_instance['filter'] ) { $instance['visual'] = true; } if ( isset( $new_instance['visual'] ) ) { $instance['visual'] = ! empty( $new_instance['visual'] ); } // Filter is always true in visual mode. if ( ! empty( $instance['visual'] ) ) { $instance['filter'] = true; } return $instance; } /** * Enqueues preview scripts. * * These scripts normally are enqueued just-in-time when a playlist shortcode is used. * However, in the customizer, a playlist shortcode may be used in a text widget and * dynamically added via selective refresh, so it is important to unconditionally enqueue them. * * @since 4.9.3 */ public function enqueue_preview_scripts() { require_once dirname( __DIR__ ) . '/media.php'; wp_playlist_scripts( 'audio' ); wp_playlist_scripts( 'video' ); } /** * Loads the required scripts and styles for the widget control. * * @since 4.8.0 */ public function enqueue_admin_scripts() { wp_enqueue_editor(); wp_enqueue_media(); wp_enqueue_script( 'text-widgets' ); wp_add_inline_script( 'text-widgets', sprintf( 'wp.textWidgets.idBases.push( %s );', wp_json_encode( $this->id_base, JSON_HEX_TAG | JSON_UNESCAPED_SLASHES ) ) ); wp_add_inline_script( 'text-widgets', 'wp.textWidgets.init();', 'after' ); } /** * Outputs the Text widget settings form. * * @since 2.8.0 * @since 4.8.0 Form only contains hidden inputs which are synced with JS template. * @since 4.8.1 Restored original form to be displayed when in legacy mode. * * @see WP_Widget_Text::render_control_template_scripts() * @see _WP_Editors::editor() * * @param array $instance Current settings. */ public function form( $instance ) { $instance = wp_parse_args( (array) $instance, array( 'title' => '', 'text' => '', ) ); ?> <?php if ( ! $this->is_legacy_instance( $instance ) ) : ?> <?php if ( user_can_richedit() ) { add_filter( 'the_editor_content', 'format_for_editor', 10, 2 ); $default_editor = 'tinymce'; } else { $default_editor = 'html'; } /** This filter is documented in wp-includes/class-wp-editor.php */ $text = apply_filters( 'the_editor_content', $instance['text'], $default_editor ); // Reset filter addition. if ( user_can_richedit() ) { remove_filter( 'the_editor_content', 'format_for_editor' ); } // Prevent premature closing of textarea in case format_for_editor() didn't apply or the_editor_content filter did a wrong thing. $escaped_text = preg_replace( '#</textarea#i', '</textarea', $text ); ?> <input id="<?php echo $this->get_field_id( 'title' ); ?>" name="<?php echo $this->get_field_name( 'title' ); ?>" class="title sync-input" type="hidden" value="<?php echo esc_attr( $instance['title'] ); ?>"> <textarea id="<?php echo $this->get_field_id( 'text' ); ?>" name="<?php echo $this->get_field_name( 'text' ); ?>" class="text sync-input" hidden><?php echo $escaped_text; ?></textarea> <input id="<?php echo $this->get_field_id( 'filter' ); ?>" name="<?php echo $this->get_field_name( 'filter' ); ?>" class="filter sync-input" type="hidden" value="on"> <input id="<?php echo $this->get_field_id( 'visual' ); ?>" name="<?php echo $this->get_field_name( 'visual' ); ?>" class="visual sync-input" type="hidden" value="on"> <?php else : ?> <input id="<?php echo $this->get_field_id( 'visual' ); ?>" name="<?php echo $this->get_field_name( 'visual' ); ?>" class="visual" type="hidden" value=""> <p> <label for="<?php echo $this->get_field_id( 'title' ); ?>"><?php _e( 'Title:' ); ?></label> <input class="widefat" id="<?php echo $this->get_field_id( 'title' ); ?>" name="<?php echo $this->get_field_name( 'title' ); ?>" type="text" value="<?php echo esc_attr( $instance['title'] ); ?>" /> </p> <?php if ( ! isset( $instance['visual'] ) ) { $widget_info_message = __( 'This widget may contain code that may work better in the “Custom HTML” widget. How about trying that widget instead?' ); } else { $widget_info_message = __( 'This widget may have contained code that may work better in the “Custom HTML” widget. If you have not yet, how about trying that widget instead?' ); } wp_admin_notice( $widget_info_message, array( 'type' => 'info', 'additional_classes' => array( 'notice-alt', 'inline' ), ) ); ?> <p> <label for="<?php echo $this->get_field_id( 'text' ); ?>"><?php _e( 'Content:' ); ?></label> <textarea class="widefat" rows="16" cols="20" id="<?php echo $this->get_field_id( 'text' ); ?>" name="<?php echo $this->get_field_name( 'text' ); ?>"><?php echo esc_textarea( $instance['text'] ); ?></textarea> </p> <p> <input id="<?php echo $this->get_field_id( 'filter' ); ?>" name="<?php echo $this->get_field_name( 'filter' ); ?>" type="checkbox"<?php checked( ! empty( $instance['filter'] ) ); ?> /> <label for="<?php echo $this->get_field_id( 'filter' ); ?>"><?php _e( 'Automatically add paragraphs' ); ?></label> </p> <?php endif; } /** * Renders form template scripts. * * @since 4.8.0 * @since 4.9.0 The method is now static. */ public static function render_control_template_scripts() { $dismissed_pointers = explode( ',', (string) get_user_meta( get_current_user_id(), 'dismissed_wp_pointers', true ) ); ?> <script type="text/html" id="tmpl-widget-text-control-fields"> <# var elementIdPrefix = 'el' + String( Math.random() ).replace( /\D/g, '' ) + '_' #> <p> <label for="{{ elementIdPrefix }}title"><?php esc_html_e( 'Title:' ); ?></label> <input id="{{ elementIdPrefix }}title" type="text" class="widefat title"> </p> <?php if ( ! in_array( 'text_widget_custom_html', $dismissed_pointers, true ) ) : ?> <div hidden class="wp-pointer custom-html-widget-pointer wp-pointer-top"> <div class="wp-pointer-content"> <h3><?php _e( 'New Custom HTML Widget' ); ?></h3> <?php if ( is_customize_preview() ) : ?> <p><?php _e( 'Did you know there is a “Custom HTML” widget now? You can find it by pressing the “<a class="add-widget" href="#">Add a Widget</a>” button and searching for “HTML”. Check it out to add some custom code to your site!' ); ?></p> <?php else : ?> <p><?php _e( 'Did you know there is a “Custom HTML” widget now? You can find it by scanning the list of available widgets on this screen. Check it out to add some custom code to your site!' ); ?></p> <?php endif; ?> <div class="wp-pointer-buttons"> <a class="close" href="#"><?php _e( 'Dismiss' ); ?></a> </div> </div> <div class="wp-pointer-arrow"> <div class="wp-pointer-arrow-inner"></div> </div> </div> <?php endif; ?> <?php if ( ! in_array( 'text_widget_paste_html', $dismissed_pointers, true ) ) : ?> <div hidden class="wp-pointer paste-html-pointer wp-pointer-top"> <div class="wp-pointer-content"> <h3><?php _e( 'Did you just paste HTML?' ); ?></h3> <p><?php _e( 'Hey there, looks like you just pasted HTML into the “Visual” tab of the Text widget. You may want to paste your code into the “Code” tab instead. Alternately, try out the new “Custom HTML” widget!' ); ?></p> <div class="wp-pointer-buttons"> <a class="close" href="#"><?php _e( 'Dismiss' ); ?></a> </div> </div> <div class="wp-pointer-arrow"> <div class="wp-pointer-arrow-inner"></div> </div> </div> <?php endif; ?> <p> <label for="{{ elementIdPrefix }}text" class="screen-reader-text"><?php /* translators: Hidden accessibility text. */ esc_html_e( 'Content:' ); ?></label> <textarea id="{{ elementIdPrefix }}text" class="widefat text wp-editor-area" style="height: 200px" rows="16" cols="20"></textarea> </p> </script> <?php } } PK �V�\�n(� error_lognu �[��� [15-Jul-2026 15:46:34 UTC] PHP Fatal error: Uncaught Error: Class "WP_Widget" not found in /home2/zetasolve/kaiwodefense.com/wp-includes/widgets/class-wp-nav-menu-widget.php:17 Stack trace: #0 {main} thrown in /home2/zetasolve/kaiwodefense.com/wp-includes/widgets/class-wp-nav-menu-widget.php on line 17 [15-Jul-2026 15:46:36 UTC] PHP Fatal error: Uncaught Error: Class "WP_Widget" not found in /home2/zetasolve/kaiwodefense.com/wp-includes/widgets/class-wp-widget-archives.php:17 Stack trace: #0 {main} thrown in /home2/zetasolve/kaiwodefense.com/wp-includes/widgets/class-wp-widget-archives.php on line 17 [15-Jul-2026 15:46:37 UTC] PHP Fatal error: Uncaught Error: Class "WP_Widget" not found in /home2/zetasolve/kaiwodefense.com/wp-includes/widgets/class-wp-widget-block.php:17 Stack trace: #0 {main} thrown in /home2/zetasolve/kaiwodefense.com/wp-includes/widgets/class-wp-widget-block.php on line 17 [15-Jul-2026 15:46:38 UTC] PHP Fatal error: Uncaught Error: Class "WP_Widget" not found in /home2/zetasolve/kaiwodefense.com/wp-includes/widgets/class-wp-widget-calendar.php:17 Stack trace: #0 {main} thrown in /home2/zetasolve/kaiwodefense.com/wp-includes/widgets/class-wp-widget-calendar.php on line 17 [15-Jul-2026 15:46:39 UTC] PHP Fatal error: Uncaught Error: Class "WP_Widget" not found in /home2/zetasolve/kaiwodefense.com/wp-includes/widgets/class-wp-widget-categories.php:17 Stack trace: #0 {main} thrown in /home2/zetasolve/kaiwodefense.com/wp-includes/widgets/class-wp-widget-categories.php on line 17 [15-Jul-2026 15:46:40 UTC] PHP Fatal error: Uncaught Error: Class "WP_Widget" not found in /home2/zetasolve/kaiwodefense.com/wp-includes/widgets/class-wp-widget-custom-html.php:17 Stack trace: #0 {main} thrown in /home2/zetasolve/kaiwodefense.com/wp-includes/widgets/class-wp-widget-custom-html.php on line 17 [15-Jul-2026 15:46:40 UTC] PHP Fatal error: Uncaught Error: Class "WP_Widget" not found in /home2/zetasolve/kaiwodefense.com/wp-includes/widgets/class-wp-widget-links.php:17 Stack trace: #0 {main} thrown in /home2/zetasolve/kaiwodefense.com/wp-includes/widgets/class-wp-widget-links.php on line 17 [15-Jul-2026 15:46:42 UTC] PHP Fatal error: Uncaught Error: Class "WP_Widget_Media" not found in /home2/zetasolve/kaiwodefense.com/wp-includes/widgets/class-wp-widget-media-audio.php:18 Stack trace: #0 {main} thrown in /home2/zetasolve/kaiwodefense.com/wp-includes/widgets/class-wp-widget-media-audio.php on line 18 [15-Jul-2026 15:46:43 UTC] PHP Fatal error: Uncaught Error: Class "WP_Widget_Media" not found in /home2/zetasolve/kaiwodefense.com/wp-includes/widgets/class-wp-widget-media-gallery.php:18 Stack trace: #0 {main} thrown in /home2/zetasolve/kaiwodefense.com/wp-includes/widgets/class-wp-widget-media-gallery.php on line 18 [15-Jul-2026 15:46:43 UTC] PHP Fatal error: Uncaught Error: Class "WP_Widget_Media" not found in /home2/zetasolve/kaiwodefense.com/wp-includes/widgets/class-wp-widget-media-image.php:18 Stack trace: #0 {main} thrown in /home2/zetasolve/kaiwodefense.com/wp-includes/widgets/class-wp-widget-media-image.php on line 18 [15-Jul-2026 15:46:43 UTC] PHP Fatal error: Uncaught Error: Class "WP_Widget_Media" not found in /home2/zetasolve/kaiwodefense.com/wp-includes/widgets/class-wp-widget-media-video.php:18 Stack trace: #0 {main} thrown in /home2/zetasolve/kaiwodefense.com/wp-includes/widgets/class-wp-widget-media-video.php on line 18 [15-Jul-2026 15:46:44 UTC] PHP Fatal error: Uncaught Error: Class "WP_Widget" not found in /home2/zetasolve/kaiwodefense.com/wp-includes/widgets/class-wp-widget-media.php:17 Stack trace: #0 {main} thrown in /home2/zetasolve/kaiwodefense.com/wp-includes/widgets/class-wp-widget-media.php on line 17 [15-Jul-2026 15:46:46 UTC] PHP Fatal error: Uncaught Error: Class "WP_Widget" not found in /home2/zetasolve/kaiwodefense.com/wp-includes/widgets/class-wp-widget-meta.php:19 Stack trace: #0 {main} thrown in /home2/zetasolve/kaiwodefense.com/wp-includes/widgets/class-wp-widget-meta.php on line 19 [15-Jul-2026 15:46:47 UTC] PHP Fatal error: Uncaught Error: Class "WP_Widget" not found in /home2/zetasolve/kaiwodefense.com/wp-includes/widgets/class-wp-widget-pages.php:17 Stack trace: #0 {main} thrown in /home2/zetasolve/kaiwodefense.com/wp-includes/widgets/class-wp-widget-pages.php on line 17 [15-Jul-2026 15:46:47 UTC] PHP Fatal error: Uncaught Error: Class "WP_Widget" not found in /home2/zetasolve/kaiwodefense.com/wp-includes/widgets/class-wp-widget-recent-comments.php:17 Stack trace: #0 {main} thrown in /home2/zetasolve/kaiwodefense.com/wp-includes/widgets/class-wp-widget-recent-comments.php on line 17 [15-Jul-2026 15:46:47 UTC] PHP Fatal error: Uncaught Error: Class "WP_Widget" not found in /home2/zetasolve/kaiwodefense.com/wp-includes/widgets/class-wp-widget-recent-posts.php:17 Stack trace: #0 {main} thrown in /home2/zetasolve/kaiwodefense.com/wp-includes/widgets/class-wp-widget-recent-posts.php on line 17 [15-Jul-2026 15:46:48 UTC] PHP Fatal error: Uncaught Error: Class "WP_Widget" not found in /home2/zetasolve/kaiwodefense.com/wp-includes/widgets/class-wp-widget-rss.php:17 Stack trace: #0 {main} thrown in /home2/zetasolve/kaiwodefense.com/wp-includes/widgets/class-wp-widget-rss.php on line 17 [15-Jul-2026 15:46:49 UTC] PHP Fatal error: Uncaught Error: Class "WP_Widget" not found in /home2/zetasolve/kaiwodefense.com/wp-includes/widgets/class-wp-widget-search.php:17 Stack trace: #0 {main} thrown in /home2/zetasolve/kaiwodefense.com/wp-includes/widgets/class-wp-widget-search.php on line 17 [15-Jul-2026 15:46:50 UTC] PHP Fatal error: Uncaught Error: Class "WP_Widget" not found in /home2/zetasolve/kaiwodefense.com/wp-includes/widgets/class-wp-widget-tag-cloud.php:17 Stack trace: #0 {main} thrown in /home2/zetasolve/kaiwodefense.com/wp-includes/widgets/class-wp-widget-tag-cloud.php on line 17 [15-Jul-2026 15:46:50 UTC] PHP Fatal error: Uncaught Error: Class "WP_Widget" not found in /home2/zetasolve/kaiwodefense.com/wp-includes/widgets/class-wp-widget-text.php:17 Stack trace: #0 {main} thrown in /home2/zetasolve/kaiwodefense.com/wp-includes/widgets/class-wp-widget-text.php on line 17 PK �V�\Q�X�| | class-wp-widget-rss.phpnu �[��� <?php /** * Widget API: WP_Widget_RSS class * * @package WordPress * @subpackage Widgets * @since 4.4.0 */ /** * Core class used to implement a RSS widget. * * @since 2.8.0 * * @see WP_Widget */ class WP_Widget_RSS extends WP_Widget { /** * Sets up a new RSS widget instance. * * @since 2.8.0 */ public function __construct() { $widget_ops = array( 'description' => __( 'Entries from any RSS or Atom feed.' ), 'customize_selective_refresh' => true, 'show_instance_in_rest' => true, ); $control_ops = array( 'width' => 400, 'height' => 200, ); parent::__construct( 'rss', __( 'RSS' ), $widget_ops, $control_ops ); } /** * Outputs the content for the current RSS widget instance. * * @since 2.8.0 * * @param array $args Display arguments including 'before_title', 'after_title', * 'before_widget', and 'after_widget'. * @param array $instance Settings for the current RSS widget instance. */ public function widget( $args, $instance ) { if ( isset( $instance['error'] ) && $instance['error'] ) { return; } $url = ! empty( $instance['url'] ) ? $instance['url'] : ''; while ( ! empty( $url ) && stristr( $url, 'http' ) !== $url ) { $url = substr( $url, 1 ); } if ( empty( $url ) ) { return; } // Self-URL destruction sequence. if ( in_array( untrailingslashit( $url ), array( site_url(), home_url() ), true ) ) { return; } $rss = fetch_feed( $url ); $title = $instance['title']; $desc = ''; $link = ''; if ( ! is_wp_error( $rss ) ) { $desc = esc_attr( strip_tags( html_entity_decode( $rss->get_description(), ENT_QUOTES, get_option( 'blog_charset' ) ) ) ); if ( empty( $title ) ) { $title = strip_tags( $rss->get_title() ); } $link = strip_tags( $rss->get_permalink() ); while ( ! empty( $link ) && stristr( $link, 'http' ) !== $link ) { $link = substr( $link, 1 ); } } if ( empty( $title ) ) { $title = ! empty( $desc ) ? $desc : __( 'Unknown Feed' ); } /** This filter is documented in wp-includes/widgets/class-wp-widget-pages.php */ $title = apply_filters( 'widget_title', $title, $instance, $this->id_base ); if ( $title ) { $feed_link = ''; $feed_url = strip_tags( $url ); $feed_icon = includes_url( 'images/rss.png' ); $feed_link = sprintf( '<a class="rsswidget rss-widget-feed" href="%1$s"><img class="rss-widget-icon" style="border:0" width="14" height="14" src="%2$s" alt="%3$s"%4$s /></a> ', esc_url( $feed_url ), esc_url( $feed_icon ), esc_attr__( 'RSS' ), ( wp_lazy_loading_enabled( 'img', 'rss_widget_feed_icon' ) ? ' loading="lazy"' : '' ) ); /** * Filters the classic RSS widget's feed icon link. * * Themes can remove the icon link by using `add_filter( 'rss_widget_feed_link', '__return_empty_string' );`. * * @since 5.9.0 * * @param string|false $feed_link HTML for link to RSS feed. * @param array $instance Array of settings for the current widget. */ $feed_link = apply_filters( 'rss_widget_feed_link', $feed_link, $instance ); $title = $feed_link . '<a class="rsswidget rss-widget-title" href="' . esc_url( $link ) . '">' . esc_html( $title ) . '</a>'; } echo $args['before_widget']; if ( $title ) { echo $args['before_title'] . $title . $args['after_title']; } $format = current_theme_supports( 'html5', 'navigation-widgets' ) ? 'html5' : 'xhtml'; /** This filter is documented in wp-includes/widgets/class-wp-nav-menu-widget.php */ $format = apply_filters( 'navigation_widgets_format', $format ); if ( 'html5' === $format ) { // The title may be filtered: Strip out HTML and make sure the aria-label is never empty. $title = trim( strip_tags( $title ) ); $aria_label = $title ? $title : __( 'RSS Feed' ); echo '<nav aria-label="' . esc_attr( $aria_label ) . '">'; } wp_widget_rss_output( $rss, $instance ); if ( 'html5' === $format ) { echo '</nav>'; } echo $args['after_widget']; if ( ! is_wp_error( $rss ) ) { $rss->__destruct(); } unset( $rss ); } /** * Handles updating settings for the current RSS widget instance. * * @since 2.8.0 * * @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 Updated settings to save. */ public function update( $new_instance, $old_instance ) { $testurl = ( isset( $new_instance['url'] ) && ( ! isset( $old_instance['url'] ) || ( $new_instance['url'] !== $old_instance['url'] ) ) ); return wp_widget_rss_process( $new_instance, $testurl ); } /** * Outputs the settings form for the RSS widget. * * @since 2.8.0 * * @param array $instance Current settings. */ public function form( $instance ) { if ( empty( $instance ) ) { $instance = array( 'title' => '', 'url' => '', 'items' => 10, 'error' => false, 'show_summary' => 0, 'show_author' => 0, 'show_date' => 0, ); } $instance['number'] = $this->number; wp_widget_rss_form( $instance ); } } PK �V�\�i�`/ `/ class-wp-widget-custom-html.phpnu �[��� <?php /** * Widget API: WP_Widget_Custom_HTML class * * @package WordPress * @subpackage Widgets * @since 4.8.1 */ /** * Core class used to implement a Custom HTML widget. * * @since 4.8.1 * * @see WP_Widget */ class WP_Widget_Custom_HTML extends WP_Widget { /** * Whether or not the widget has been registered yet. * * @since 4.9.0 * @var bool */ protected $registered = false; /** * Default instance. * * @since 4.8.1 * @var array */ protected $default_instance = array( 'title' => '', 'content' => '', ); /** * Sets up a new Custom HTML widget instance. * * @since 4.8.1 */ public function __construct() { $widget_ops = array( 'classname' => 'widget_custom_html', 'description' => __( 'Arbitrary HTML code.' ), 'customize_selective_refresh' => true, 'show_instance_in_rest' => true, ); $control_ops = array( 'width' => 400, 'height' => 350, ); parent::__construct( 'custom_html', __( 'Custom HTML' ), $widget_ops, $control_ops ); } /** * Add hooks for enqueueing assets when registering all widget instances of this widget class. * * @since 4.9.0 * * @param int $number Optional. The unique order number of this widget instance * compared to other instances of the same class. Default -1. */ public function _register_one( $number = -1 ) { parent::_register_one( $number ); if ( $this->registered ) { return; } $this->registered = true; /* * Note that the widgets component in the customizer will also do * the 'admin_print_scripts-widgets.php' action in WP_Customize_Widgets::print_scripts(). */ add_action( 'admin_print_scripts-widgets.php', array( $this, 'enqueue_admin_scripts' ) ); /* * Note that the widgets component in the customizer will also do * the 'admin_footer-widgets.php' action in WP_Customize_Widgets::print_footer_scripts(). */ add_action( 'admin_footer-widgets.php', array( 'WP_Widget_Custom_HTML', 'render_control_template_scripts' ) ); // Note this action is used to ensure the help text is added to the end. add_action( 'admin_head-widgets.php', array( 'WP_Widget_Custom_HTML', 'add_help_text' ) ); } /** * Filters gallery shortcode attributes. * * Prevents all of a site's attachments from being shown in a gallery displayed on a * non-singular template where a $post context is not available. * * @since 4.9.0 * * @param array $attrs Attributes. * @return array Attributes. */ public function _filter_gallery_shortcode_attrs( $attrs ) { if ( ! is_singular() && empty( $attrs['id'] ) && empty( $attrs['include'] ) ) { $attrs['id'] = -1; } return $attrs; } /** * Outputs the content for the current Custom HTML widget instance. * * @since 4.8.1 * * @global WP_Post $post Global post object. * * @param array $args Display arguments including 'before_title', 'after_title', * 'before_widget', and 'after_widget'. * @param array $instance Settings for the current Custom HTML widget instance. */ public function widget( $args, $instance ) { global $post; // Override global $post so filters (and shortcodes) apply in a consistent context. $original_post = $post; if ( is_singular() ) { // Make sure post is always the queried object on singular queries (not from another sub-query that failed to clean up the global $post). $post = get_queried_object(); } else { // Nullify the $post global during widget rendering to prevent shortcodes from running with the unexpected context on archive queries. $post = null; } // Prevent dumping out all attachments from the media library. add_filter( 'shortcode_atts_gallery', array( $this, '_filter_gallery_shortcode_attrs' ) ); $instance = array_merge( $this->default_instance, $instance ); /** This filter is documented in wp-includes/widgets/class-wp-widget-pages.php */ $title = apply_filters( 'widget_title', $instance['title'], $instance, $this->id_base ); // Prepare instance data that looks like a normal Text widget. $simulated_text_widget_instance = array_merge( $instance, array( 'text' => $instance['content'] ?? '', 'filter' => false, // Because wpautop is not applied. 'visual' => false, // Because it wasn't created in TinyMCE. ) ); unset( $simulated_text_widget_instance['content'] ); // Was moved to 'text' prop. /** This filter is documented in wp-includes/widgets/class-wp-widget-text.php */ $content = apply_filters( 'widget_text', $instance['content'], $simulated_text_widget_instance, $this ); /** * Filters the content of the Custom HTML widget. * * @since 4.8.1 * * @param string $content The widget content. * @param array $instance Array of settings for the current widget. * @param WP_Widget_Custom_HTML $widget Current Custom HTML widget instance. */ $content = apply_filters( 'widget_custom_html_content', $content, $instance, $this ); // Restore post global. $post = $original_post; remove_filter( 'shortcode_atts_gallery', array( $this, '_filter_gallery_shortcode_attrs' ) ); // Inject the Text widget's container class name alongside this widget's class name for theme styling compatibility. $args['before_widget'] = preg_replace( '/(?<=\sclass=["\'])/', 'widget_text ', $args['before_widget'] ); echo $args['before_widget']; if ( ! empty( $title ) ) { echo $args['before_title'] . $title . $args['after_title']; } echo '<div class="textwidget custom-html-widget">'; // The textwidget class is for theme styling compatibility. echo $content; echo '</div>'; echo $args['after_widget']; } /** * Handles updating settings for the current Custom HTML widget instance. * * @since 4.8.1 * * @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_merge( $this->default_instance, $old_instance ); $instance['title'] = sanitize_text_field( $new_instance['title'] ); if ( current_user_can( 'unfiltered_html' ) ) { $instance['content'] = $new_instance['content']; } else { $instance['content'] = wp_kses_post( $new_instance['content'] ); } return $instance; } /** * Loads the required scripts and styles for the widget control. * * @since 4.9.0 */ public function enqueue_admin_scripts() { $settings = wp_enqueue_code_editor( array( 'type' => 'text/html', 'codemirror' => array( 'indentUnit' => 2, 'tabSize' => 2, ), ) ); wp_enqueue_script( 'custom-html-widgets' ); wp_add_inline_script( 'custom-html-widgets', sprintf( 'wp.customHtmlWidgets.idBases.push( %s );', wp_json_encode( $this->id_base, JSON_HEX_TAG | JSON_UNESCAPED_SLASHES ) ) ); if ( empty( $settings ) ) { $settings = array( 'disabled' => true, ); } wp_add_inline_script( 'custom-html-widgets', sprintf( 'wp.customHtmlWidgets.init( %s );', wp_json_encode( $settings, JSON_HEX_TAG | JSON_UNESCAPED_SLASHES ) ), 'after' ); $l10n = array( 'errorNotice' => array( /* translators: %d: Error count. */ 'singular' => _n( 'There is %d error which must be fixed before you can save.', 'There are %d errors which must be fixed before you can save.', 1 ), /* translators: %d: Error count. */ 'plural' => _n( 'There is %d error which must be fixed before you can save.', 'There are %d errors which must be fixed before you can save.', 2 ), // @todo This is lacking, as some languages have a dedicated dual form. For proper handling of plurals in JS, see #20491. ), ); wp_add_inline_script( 'custom-html-widgets', sprintf( 'jQuery.extend( wp.customHtmlWidgets.l10n, %s );', wp_json_encode( $l10n, JSON_HEX_TAG | JSON_UNESCAPED_SLASHES ) ), 'after' ); } /** * Outputs the Custom HTML widget settings form. * * @since 4.8.1 * @since 4.9.0 The form contains only hidden sync inputs. For the control UI, see `WP_Widget_Custom_HTML::render_control_template_scripts()`. * * @see WP_Widget_Custom_HTML::render_control_template_scripts() * * @param array $instance Current instance. */ public function form( $instance ) { $instance = wp_parse_args( (array) $instance, $this->default_instance ); ?> <input id="<?php echo $this->get_field_id( 'title' ); ?>" name="<?php echo $this->get_field_name( 'title' ); ?>" class="title sync-input" type="hidden" value="<?php echo esc_attr( $instance['title'] ); ?>" /> <textarea id="<?php echo $this->get_field_id( 'content' ); ?>" name="<?php echo $this->get_field_name( 'content' ); ?>" class="content sync-input" hidden><?php echo esc_textarea( $instance['content'] ); ?></textarea> <?php } /** * Render form template scripts. * * @since 4.9.0 */ public static function render_control_template_scripts() { ?> <script type="text/html" id="tmpl-widget-custom-html-control-fields"> <# var elementIdPrefix = 'el' + String( Math.random() ).replace( /\D/g, '' ) + '_' #> <p> <label for="{{ elementIdPrefix }}title"><?php esc_html_e( 'Title:' ); ?></label> <input id="{{ elementIdPrefix }}title" type="text" class="widefat title"> </p> <p> <label for="{{ elementIdPrefix }}content" id="{{ elementIdPrefix }}content-label"><?php esc_html_e( 'Content:' ); ?></label> <textarea id="{{ elementIdPrefix }}content" class="widefat code content" rows="16" cols="20"></textarea> </p> <?php if ( ! current_user_can( 'unfiltered_html' ) ) : ?> <?php $probably_unsafe_html = array( 'script', 'iframe', 'form', 'input', 'style' ); $allowed_html = wp_kses_allowed_html( 'post' ); $disallowed_html = array_diff( $probably_unsafe_html, array_keys( $allowed_html ) ); ?> <?php if ( ! empty( $disallowed_html ) ) : ?> <# if ( data.codeEditorDisabled ) { #> <p> <?php _e( 'Some HTML tags are not permitted, including:' ); ?> <code><?php echo implode( '</code>, <code>', $disallowed_html ); ?></code> </p> <# } #> <?php endif; ?> <?php endif; ?> <div class="code-editor-error-container"></div> </script> <?php } /** * Add help text to widgets admin screen. * * @since 4.9.0 */ public static function add_help_text() { $screen = get_current_screen(); $content = '<p>'; $content .= __( 'Use the Custom HTML widget to add arbitrary HTML code to your widget areas.' ); $content .= '</p>'; if ( 'false' !== wp_get_current_user()->syntax_highlighting ) { $content .= '<p>'; $content .= sprintf( /* translators: 1: Link to user profile, 2: Additional link attributes, 3: Accessibility text. */ __( 'The edit field automatically highlights code syntax. You can disable this in your <a href="%1$s" %2$s>user profile%3$s</a> to work in plain text mode.' ), esc_url( get_edit_profile_url() ), 'class="external-link" target="_blank"', sprintf( '<span class="screen-reader-text"> %s</span>', /* translators: Hidden accessibility text. */ __( '(opens in a new tab)' ) ) ); $content .= '</p>'; $content .= '<p id="editor-keyboard-trap-help-1">' . __( 'When using a keyboard to navigate:' ) . '</p>'; $content .= '<ul>'; $content .= '<li id="editor-keyboard-trap-help-2">' . __( 'In the editing area, the Tab key enters a tab character.' ) . '</li>'; $content .= '<li id="editor-keyboard-trap-help-3">' . __( 'To move away from this area, press the Esc key followed by the Tab key.' ) . '</li>'; $content .= '<li id="editor-keyboard-trap-help-4">' . __( 'Screen reader users: when in forms mode, you may need to press the Esc key twice.' ) . '</li>'; $content .= '</ul>'; } $screen->add_help_tab( array( 'id' => 'custom_html_widget', 'title' => __( 'Custom HTML Widget' ), 'content' => $content, ) ); } } PK �V�\�8zz z class-wp-widget-tag-cloud.phpnu �[��� <?php /** * Widget API: WP_Widget_Tag_Cloud class * * @package WordPress * @subpackage Widgets * @since 4.4.0 */ /** * Core class used to implement a Tag cloud widget. * * @since 2.8.0 * * @see WP_Widget */ class WP_Widget_Tag_Cloud extends WP_Widget { /** * Sets up a new Tag Cloud widget instance. * * @since 2.8.0 */ public function __construct() { $widget_ops = array( 'description' => __( 'A cloud of your most used tags.' ), 'customize_selective_refresh' => true, 'show_instance_in_rest' => true, ); parent::__construct( 'tag_cloud', __( 'Tag Cloud' ), $widget_ops ); } /** * Outputs the content for the current Tag Cloud widget instance. * * @since 2.8.0 * * @param array $args Display arguments including 'before_title', 'after_title', * 'before_widget', and 'after_widget'. * @param array $instance Settings for the current Tag Cloud widget instance. */ public function widget( $args, $instance ) { $current_taxonomy = $this->_get_current_taxonomy( $instance ); if ( ! empty( $instance['title'] ) ) { $title = $instance['title']; } else { if ( 'post_tag' === $current_taxonomy ) { $title = __( 'Tags' ); } else { $tax = get_taxonomy( $current_taxonomy ); $title = $tax->labels->name; } } $default_title = $title; $show_count = ! empty( $instance['count'] ); $tag_cloud = wp_tag_cloud( /** * Filters the taxonomy used in the Tag Cloud widget. * * @since 2.8.0 * @since 3.0.0 Added taxonomy drop-down. * @since 4.9.0 Added the `$instance` parameter. * * @see wp_tag_cloud() * * @param array $args Args used for the tag cloud widget. * @param array $instance Array of settings for the current widget. */ apply_filters( 'widget_tag_cloud_args', array( 'taxonomy' => $current_taxonomy, 'echo' => false, 'show_count' => $show_count, ), $instance ) ); if ( empty( $tag_cloud ) ) { return; } /** This filter is documented in wp-includes/widgets/class-wp-widget-pages.php */ $title = apply_filters( 'widget_title', $title, $instance, $this->id_base ); echo $args['before_widget']; if ( $title ) { echo $args['before_title'] . $title . $args['after_title']; } $format = current_theme_supports( 'html5', 'navigation-widgets' ) ? 'html5' : 'xhtml'; /** This filter is documented in wp-includes/widgets/class-wp-nav-menu-widget.php */ $format = apply_filters( 'navigation_widgets_format', $format ); if ( 'html5' === $format ) { // The title may be filtered: Strip out HTML and make sure the aria-label is never empty. $title = trim( strip_tags( $title ) ); $aria_label = $title ? $title : $default_title; echo '<nav aria-label="' . esc_attr( $aria_label ) . '">'; } echo '<div class="tagcloud">'; echo $tag_cloud; echo "</div>\n"; if ( 'html5' === $format ) { echo '</nav>'; } echo $args['after_widget']; } /** * Handles updating settings for the current Tag Cloud widget instance. * * @since 2.8.0 * * @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['count'] = ! empty( $new_instance['count'] ) ? 1 : 0; $instance['taxonomy'] = stripslashes( $new_instance['taxonomy'] ); return $instance; } /** * Outputs the Tag Cloud widget settings form. * * @since 2.8.0 * * @param array $instance Current settings. */ public function form( $instance ) { $title = ! empty( $instance['title'] ) ? $instance['title'] : ''; $count = isset( $instance['count'] ) ? (bool) $instance['count'] : false; ?> <p> <label for="<?php echo $this->get_field_id( 'title' ); ?>"><?php _e( 'Title:' ); ?></label> <input type="text" class="widefat" id="<?php echo $this->get_field_id( 'title' ); ?>" name="<?php echo $this->get_field_name( 'title' ); ?>" value="<?php echo esc_attr( $title ); ?>" /> </p> <?php $taxonomies = get_taxonomies( array( 'show_tagcloud' => true ), 'object' ); $current_taxonomy = $this->_get_current_taxonomy( $instance ); switch ( count( $taxonomies ) ) { // No tag cloud supporting taxonomies found, display error message. case 0: ?> <input type="hidden" id="<?php echo $this->get_field_id( 'taxonomy' ); ?>" name="<?php echo $this->get_field_name( 'taxonomy' ); ?>" value="" /> <p> <?php _e( 'The tag cloud will not be displayed since there are no taxonomies that support the tag cloud widget.' ); ?> </p> <?php break; // Just a single tag cloud supporting taxonomy found, no need to display a select. case 1: $keys = array_keys( $taxonomies ); $taxonomy = reset( $keys ); ?> <input type="hidden" id="<?php echo $this->get_field_id( 'taxonomy' ); ?>" name="<?php echo $this->get_field_name( 'taxonomy' ); ?>" value="<?php echo esc_attr( $taxonomy ); ?>" /> <?php break; // More than one tag cloud supporting taxonomy found, display a select. default: ?> <p> <label for="<?php echo $this->get_field_id( 'taxonomy' ); ?>"><?php _e( 'Taxonomy:' ); ?></label> <select class="widefat" id="<?php echo $this->get_field_id( 'taxonomy' ); ?>" name="<?php echo $this->get_field_name( 'taxonomy' ); ?>"> <?php foreach ( $taxonomies as $taxonomy => $tax ) : ?> <option value="<?php echo esc_attr( $taxonomy ); ?>" <?php selected( $taxonomy, $current_taxonomy ); ?>> <?php echo esc_html( $tax->labels->name ); ?> </option> <?php endforeach; ?> </select> </p> <?php } if ( count( $taxonomies ) > 0 ) { ?> <p> <input type="checkbox" class="checkbox" id="<?php echo $this->get_field_id( 'count' ); ?>" name="<?php echo $this->get_field_name( 'count' ); ?>" <?php checked( $count, true ); ?> /> <label for="<?php echo $this->get_field_id( 'count' ); ?>"><?php _e( 'Show tag counts' ); ?></label> </p> <?php } } /** * Retrieves the taxonomy for the current Tag cloud widget instance. * * @since 4.4.0 * * @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'; } } PK �V�\�[Bz"