* @license MIT License * @version 2021.06.26 */ // 添加小工具 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' => '
', )); // 去掉默认小工具 $wp_widget = array( 'WP_Widget_Block', 'WP_Widget_Pages', 'WP_Widget_Meta', 'WP_Widget_Media_Image', 'WP_Widget_Calendar', 'WP_Widget_Recent_Posts', 'WP_Widget_Recent_Comments', 'WP_Widget_RSS', 'WP_Widget_Search', 'WP_Widget_Tag_Cloud', 'WP_Nav_Menu_Widget', ); foreach ($wp_widget as $wp_widget) { unregister_widget($wp_widget); } } add_action('widgets_init', 'widgets_init'); // 分类目录计数 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; date_default_timezone_set("PRC"); $today = date("Y-m-d H:i:s"); $daysago = 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($ptime){ $ptime = strtotime($ptime); $etime = time() - $ptime; if($etime < 1) return '刚刚'; $interval = array( 12*30*24*60*60 => __(' 年前','kratos').'('.date(__('m月d日','kratos'),$ptime).')', 30*24*60*60 => __(' 个月前','kratos').'('.date(__('m月d日','kratos'),$ptime).')', 7*24*60*60 => __(' 周前','kratos').'('.date(__('m月d日','kratos'),$ptime).')', 24*60*60 => __(' 天前','kratos').'('.date(__('m月d日','kratos'),$ptime).')', 60*60 => __(' 小时前','kratos').'('.date(__('m月d日','kratos'),$ptime).')', 60 => __(' 分钟前','kratos').'('.date(__('m月d日','kratos'),$ptime).')', 1 => __(' 秒前','kratos').'('.date(__('m月d日','kratos'),$ptime).')', ); foreach($interval as$secs=>$str){ $d=$etime/$secs; if($d>=1){ $r=round($d); return$r.$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 user_id != '1' 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) . ' ' . 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'), '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'), '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'); $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 ''; } 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'), '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'), '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 '