* @license GPL-3.0 License * @version 2023.01.14 */ // 添加小工具 function widgets_init() { register_sidebar(array( 'name' => __('主页侧边栏', 'kratos'), 'id' => 'home_sidebar', 'before_widget' => '
', 'after_widget' => '
', 'before_title' => '
', 'after_title' => '
', )); register_sidebar(array( 'name' => __('文章侧边栏', 'kratos'), 'id' => 'single_sidebar', 'before_widget' => '
', 'after_widget' => '
', 'before_title' => '
', 'after_title' => '
', )); register_sidebar(array( 'name' => __('页面侧边栏', 'kratos'), 'id' => 'page_sidebar', 'before_widget' => '
', 'after_widget' => '
', 'before_title' => '
', 'after_title' => '
', )); } add_action('widgets_init', 'widgets_init'); // 关闭默认小工具 function widget_unregister() { // fix #502 #521 // unregister_widget('WP_Widget_Block'); unregister_widget('WP_Widget_Pages'); unregister_widget('WP_Widget_Meta'); unregister_widget('WP_Widget_Media_Image'); unregister_widget('WP_Widget_Calendar'); unregister_widget('WP_Widget_Recent_Posts'); unregister_widget('WP_Widget_Recent_Comments'); unregister_widget('WP_Widget_RSS'); unregister_widget('WP_Widget_Search'); unregister_widget('WP_Widget_Tag_Cloud'); unregister_widget('WP_Nav_Menu_Widget'); } add_action('widgets_init', 'widget_unregister'); // 分类目录计数 function cat_count_span($links) { $links = str_replace(' (', ' / ', $links); $links = str_replace(')', __('篇', 'kratos') . '', $links); return $links; } add_filter('wp_list_categories', 'cat_count_span'); // 文章归档计数 function archive_count_span($links) { $links = str_replace(' (', ' / ', $links); $links = str_replace(')', __('篇', 'kratos') . '', $links); return $links; } add_filter('get_archives_link', 'archive_count_span'); // 小工具文章聚合 - 热点文章 function most_comm_posts($days = 30, $nums = 6) { global $wpdb; $today = wp_date("Y-m-d H:i:s"); $daysago = wp_date("Y-m-d H:i:s", strtotime($today) - ($days * 24 * 60 * 60)); $result = $wpdb->get_results($wpdb->prepare("SELECT comment_count, ID, post_title, post_date FROM $wpdb->posts WHERE post_date BETWEEN %s AND %s and post_type = 'post' AND post_status = 'publish' ORDER BY comment_count DESC LIMIT 0, %d", $daysago, $today, $nums)); $output = ''; if (!empty($result)) { foreach ($result as $topten) { $postid = $topten->ID; $title = esc_attr(strip_tags($topten->post_title)); $commentcount = $topten->comment_count; if ($commentcount >= 0) { $output .= ''; $output .= $title; $output .= ''; } } } echo $output; } function timeago($time) { $time = strtotime($time); $dtime = time() - $time; if ($dtime < 1) return __('刚刚', 'kratos'); $intervals = [ 12 * 30 * 24 * 60 * 60 => __(' 年前', 'kratos'), 30 * 24 * 60 * 60 => __(' 个月前', 'kratos'), 7 * 24 * 60 * 60 => __(' 周前', 'kratos'), 24 * 60 * 60 => __(' 天前', 'kratos'), 60 * 60 => __(' 小时前', 'kratos'), 60 => __(' 分钟前', 'kratos'), 1 => __(' 秒前', 'kratos') ]; foreach ($intervals as $sec => $str) { $v = $dtime / $sec; if ($v >= 1) return round($v) . $str; } } function string_cut($string, $sublen, $start = 0, $code = 'UTF-8') { if ($code == 'UTF-8') { $pa = "/[\x01-\x7f]|[\xc2-\xdf][\x80-\xbf]|\xe0[\xa0-\xbf][\x80-\xbf]|[\xe1-\xef][\x80-\xbf][\x80-\xbf]|\xf0[\x90-\xbf][\x80-\xbf][\x80-\xbf]|[\xf1-\xf7][\x80-\xbf][\x80-\xbf][\x80-\xbf]/"; preg_match_all($pa, $string, $t_string); if (count($t_string[0]) - $start > $sublen) return join('', array_slice($t_string[0], $start, $sublen)) . "..."; return join('', array_slice($t_string[0], $start, $sublen)); } else { $start = $start * 2; $sublen = $sublen * 2; $strlen = strlen($string); $tmpstr = ''; for ($i = 0; $i < $strlen; $i++) { if ($i >= $start && $i < ($start + $sublen)) { if (ord(substr($string, $i, 1)) > 129) $tmpstr .= substr($string, $i, 2); else $tmpstr .= substr($string, $i, 1); } if (ord(substr($string, $i, 1)) > 129) $i++; } return $tmpstr; } } function latest_comments($list_number = 5, $cut_length = 50) { global $wpdb, $output; $comments = $wpdb->get_results($wpdb->prepare("SELECT comment_ID, comment_post_ID, comment_author, comment_author_email, comment_date_gmt, comment_content FROM {$wpdb->comments} LEFT OUTER JOIN {$wpdb->posts} ON {$wpdb->comments}.comment_post_ID = {$wpdb->posts}.ID WHERE comment_approved = '1' AND (comment_type = '' OR comment_type = 'comment') AND post_password = '' ORDER BY comment_date_gmt DESC LIMIT %d", $list_number)); foreach ($comments as $comment) { $nickname = esc_attr($comment->comment_author) ?: __('匿名', 'kratos'); $output .= '
' . get_avatar($comment, 60) . '
' . $nickname . ' ' . __('发布于 ', 'kratos') . timeago($comment->comment_date_gmt) . '(' . wp_date(__('m月d日', 'kratos'), strtotime($comment->comment_date_gmt)) . ') ' . convert_smilies(esc_attr(string_cut(strip_tags($comment->comment_content), $cut_length))) . '
'; } return $output; } class widget_search extends WP_Widget { public function __construct() { $widget_ops = array( 'classname' => 'widget_search', 'description' => __('A search form for your site.'), 'customize_selective_refresh' => true, ); parent::__construct('search', _x('Search', 'Search widget'), $widget_ops); } public function widget($args, $instance) { $title = !empty($instance['title']) ? $instance['title'] : ''; $title = apply_filters('widget_title', $title, $instance, $this->id_base); echo ''; } public function form($instance) { $instance = wp_parse_args((array) $instance, array('title' => '')); $title = $instance['title']; ?>

'')); $instance['title'] = sanitize_text_field($new_instance['title']); return $instance; } } class widget_ad extends WP_Widget { public function __construct() { add_action('admin_enqueue_scripts', array($this, 'scripts')); $widget_ops = array( 'name' => __('Kratos - 图片广告', 'kratos'), 'description' => __('显示自定义图片广告的工具', 'kratos'), ); parent::__construct(false, false, $widget_ops); } public function scripts() { wp_enqueue_script('media-upload'); wp_enqueue_media(); wp_enqueue_script('widget_scripts', ASSET_PATH . '/assets/js/widget.min.js', array('jquery')); wp_enqueue_style('widget_css', ASSET_PATH . '/assets/css/widget.min.css', array()); } public function widget($args, $instance) { $subtitle = !empty($instance['subtitle']) ? $instance['subtitle'] : __('广告', 'kratos'); $image = !empty($instance['image']) ? $instance['image'] : ''; $url = !empty($instance['url']) ? $instance['url'] : ''; echo '
'; echo '
' . $subtitle . '
'; echo '
'; } public function update($new_instance, $old_instance) { $instance = array(); $instance['subtitle'] = (!empty($new_instance['subtitle'])) ? $new_instance['subtitle'] : ''; $instance['image'] = (!empty($new_instance['image'])) ? $new_instance['image'] : ''; $instance['url'] = (!empty($new_instance['url'])) ? $new_instance['url'] : ''; return $instance; } public function form($instance) { $subtitle = !empty($instance['subtitle']) ? $instance['subtitle'] : __('广告', 'kratos'); $image = !empty($instance['image']) ? $instance['image'] : ''; $url = !empty($instance['url']) ? $instance['url'] : ''; ?>

__('Kratos - 个人简介', 'kratos'), 'description' => __('站长个人简介的展示工具', 'kratos'), ); parent::__construct(false, false, $widget_ops); } public function scripts() { wp_enqueue_script('media-upload'); wp_enqueue_media(); wp_enqueue_script('widget_scripts', ASSET_PATH . '/assets/js/widget.min.js', array('jquery')); wp_enqueue_style('widget_css', ASSET_PATH . '/assets/css/widget.min.css', array()); } public function widget($args, $instance) { $introduce = !empty(get_the_author_meta('description', '1')) ? get_the_author_meta('description', '1') : __('这个人很懒,什么都没留下', 'kratos'); $username = get_the_author_meta('display_name', '1'); $avatar = get_avatar_url('1', ['size' => '300']); $background = !empty($instance['background']) ? $instance['background'] : ASSET_PATH . '/assets/img/about-background.png'; echo '
'; echo '
'; if (kratos_option('g_login', true)) { if (current_user_can('manage_options')) { echo ''; } else { echo ''; } } echo ''; if (kratos_option('g_login', true)) { echo ''; } $introduce = str_replace("\n", '
', $introduce); echo '

' . $username . '

' . $introduce . '

'; echo '
'; } public function update($new_instance, $old_instance) { $instance = array(); $instance['background'] = (!empty($new_instance['background'])) ? $new_instance['background'] : ''; return $instance; } public function form($instance) { $background = !empty($instance['background']) ? $instance['background'] : ASSET_PATH . '/assets/img/about-background.png'; ?>

__('Kratos - 标签聚合', 'kratos'), 'description' => __('文章标签的展示工具', 'kratos'), ); parent::__construct(false, false, $widget_ops); } public function widget($args, $instance) { $number = !empty($instance['number']) ? $instance['number'] : '8'; $order = !empty($instance['order']) ? $instance['order'] : 'RAND'; $tags = wp_tag_cloud( array( 'unit' => 'px', 'smallest' => 14, 'largest' => 14, 'number' => $number, 'format' => 'flat', 'orderby' => 'count', 'order' => $order, 'echo' => false, ) ); echo '
'; echo '
' . __('标签聚合', 'kratos') . '
'; echo '
' . $tags . '
'; echo '
'; } public function update($new_instance, $old_instance) { $instance = array(); $instance['number'] = (!empty($new_instance['number'])) ? $new_instance['number'] : ''; $instance['order'] = (!empty($new_instance['order'])) ? $new_instance['order'] : ''; return $instance; } public function form($instance) { global $wpdb; $number = !empty($instance['number']) ? $instance['number'] : '8'; $order = !empty($instance['order']) ? $instance['order'] : 'RAND'; ?>

__('Kratos - 文章聚合', 'kratos'), 'description' => __('展示最热、随机、最新文章的工具', 'kratos'), ); parent::__construct(false, false, $widget_ops); } public function widget($args, $instance) { $number = !empty($instance['number']) ? $instance['number'] : '6'; $days = !empty($instance['days']) ? $instance['days'] : '30'; $order = !empty($instance['order']) ? $instance['order'] : 'hot'; echo '