2018-05-26 18:59:29 +08:00
< ? php
/**
* Sakura functions and definitions .
*
* @ link https :// developer . wordpress . org / themes / basics / theme - functions /
*
* @ package Sakura
*/
2019-10-24 22:26:11 +08:00
define ( 'SAKURA_VERSION' , '3.2.7' );
2019-08-03 19:51:27 +08:00
define ( 'BUILD_VERSION' , '3' );
2019-01-25 09:45:59 +08:00
define ( 'JSDELIVR_VERSION' , '3.6.7' );
2018-05-26 18:59:29 +08:00
//ini_set('display_errors', true);
//error_reporting(E_ALL);
if ( ! function_exists ( 'akina_setup' ) ) :
/**
* Sets up theme defaults and registers support for various WordPress features .
*
* Note that this function is hooked into the after_setup_theme hook , which
* runs before the init hook . The init hook is too late for some features , such
* as indicating support for post thumbnails .
*/
if ( ! function_exists ( 'optionsframework_init' ) ) {
define ( 'OPTIONS_FRAMEWORK_DIRECTORY' , get_template_directory_uri () . '/inc/' );
require_once dirname ( __FILE__ ) . '/inc/options-framework.php' ;
}
2019-08-18 18:50:11 +08:00
2018-05-26 18:59:29 +08:00
function akina_setup () {
/*
* Make theme available for translation .
* Translations can be filed in the / languages / directory .
* If you ' re building a theme based on Akina , use a find and replace
* to change 'akina' to the name of your theme in all the template files .
*/
load_theme_textdomain ( 'akina' , get_template_directory () . '/languages' );
/*
* Enable support for Post Thumbnails on posts and pages .
*
* @ link https :// developer . wordpress . org / themes / functionality / featured - images - post - thumbnails /
*/
add_theme_support ( 'post-thumbnails' );
set_post_thumbnail_size ( 150 , 150 , true );
// This theme uses wp_nav_menu() in one location.
register_nav_menus ( array (
'primary' => esc_html__ ( '导航菜单' , 'akina' ),
) );
/*
* Switch default core markup for search form , comment form , and comments
* to output valid HTML5 .
*/
add_theme_support ( 'html5' , array (
'search-form' ,
'comment-form' ,
'comment-list' ,
'gallery' ,
'caption' ,
) );
/*
* Enable support for Post Formats .
* See https :// developer . wordpress . org / themes / functionality / post - formats /
*/
add_theme_support ( 'post-formats' , array (
'aside' ,
'image' ,
'status' ,
) );
// Set up the WordPress core custom background feature.
add_theme_support ( 'custom-background' , apply_filters ( 'akina_custom_background_args' , array (
'default-color' => 'ffffff' ,
'default-image' => '' ,
) ) );
add_filter ( 'pre_option_link_manager_enabled' , '__return_true' );
// 优化代码
//去除头部冗余代码
remove_action ( 'wp_head' , 'feed_links_extra' , 3 );
remove_action ( 'wp_head' , 'rsd_link' );
remove_action ( 'wp_head' , 'wlwmanifest_link' );
remove_action ( 'wp_head' , 'index_rel_link' );
remove_action ( 'wp_head' , 'start_post_rel_link' , 10 , 0 );
remove_action ( 'wp_head' , 'wp_generator' );
remove_action ( 'wp_head' , 'wp_generator' ); //隐藏wordpress版本
remove_filter ( 'the_content' , 'wptexturize' ); //取消标点符号转义
2019-06-14 22:50:22 +08:00
//remove_action('rest_api_init', 'wp_oembed_register_route');
//remove_filter('rest_pre_serve_request', '_oembed_rest_pre_serve_request', 10, 4);
//remove_filter('oembed_dataparse', 'wp_filter_oembed_result', 10);
//remove_filter('oembed_response_data', 'get_oembed_response_data_rich', 10, 4);
//remove_action('wp_head', 'wp_oembed_add_discovery_links');
//remove_action('wp_head', 'wp_oembed_add_host_js');
2018-05-26 18:59:29 +08:00
remove_action ( 'template_redirect' , 'rest_output_link_header' , 11 , 0 );
function coolwp_remove_open_sans_from_wp_core () {
wp_deregister_style ( 'open-sans' );
wp_register_style ( 'open-sans' , false );
wp_enqueue_style ( 'open-sans' , '' );
}
add_action ( 'init' , 'coolwp_remove_open_sans_from_wp_core' );
/**
* Disable the emoji ' s
*/
function disable_emojis () {
remove_action ( 'wp_head' , 'print_emoji_detection_script' , 7 );
remove_action ( 'admin_print_scripts' , 'print_emoji_detection_script' );
remove_action ( 'wp_print_styles' , 'print_emoji_styles' );
remove_action ( 'admin_print_styles' , 'print_emoji_styles' );
remove_filter ( 'the_content_feed' , 'wp_staticize_emoji' );
remove_filter ( 'comment_text_rss' , 'wp_staticize_emoji' );
remove_filter ( 'wp_mail' , 'wp_staticize_emoji_for_email' );
add_filter ( 'tiny_mce_plugins' , 'disable_emojis_tinymce' );
}
add_action ( 'init' , 'disable_emojis' );
/**
* Filter function used to remove the tinymce emoji plugin .
*
* @ param array $plugins
* @ return array Difference betwen the two arrays
*/
function disable_emojis_tinymce ( $plugins ) {
if ( is_array ( $plugins ) ) {
return array_diff ( $plugins , array ( 'wpemoji' ) );
} else {
return array ();
}
}
// 移除菜单冗余代码
add_filter ( 'nav_menu_css_class' , 'my_css_attributes_filter' , 100 , 1 );
add_filter ( 'nav_menu_item_id' , 'my_css_attributes_filter' , 100 , 1 );
add_filter ( 'page_css_class' , 'my_css_attributes_filter' , 100 , 1 );
function my_css_attributes_filter ( $var ) {
return is_array ( $var ) ? array_intersect ( $var , array ( 'current-menu-item' , 'current-post-ancestor' , 'current-menu-ancestor' , 'current-menu-parent' )) : '' ;
}
}
endif ;
add_action ( 'after_setup_theme' , 'akina_setup' );
function admin_lettering (){
echo '<style type="text/css">body{font-family: Microsoft YaHei;}</style>' ;
}
add_action ( 'admin_head' , 'admin_lettering' );
/**
* Set the content width in pixels , based on the theme ' s design and stylesheet .
*
* Priority 0 to make it available to lower priority callbacks .
*
* @ global int $content_width
*/
function akina_content_width () {
$GLOBALS [ 'content_width' ] = apply_filters ( 'akina_content_width' , 640 );
}
add_action ( 'after_setup_theme' , 'akina_content_width' , 0 );
/**
* Enqueue scripts and styles .
*/
function sakura_scripts () {
if ( akina_option ( 'jsdelivr_cdn_test' )){
2019-01-24 17:01:27 +08:00
wp_enqueue_script ( 'js_lib' , get_template_directory_uri () . '/cdn/js/lib.js' , array (), SAKURA_VERSION . akina_option ( 'cookie_version' , '' ), true );
2018-05-26 18:59:29 +08:00
} else {
2019-01-26 11:25:53 +08:00
wp_enqueue_script ( 'js_lib' , 'https://cdn.jsdelivr.net/gh/mashirozx/Sakura@' . SAKURA_VERSION . '/cdn/js/lib.min.js' , array (), SAKURA_VERSION , true );
2018-05-26 18:59:29 +08:00
}
2019-01-26 11:25:53 +08:00
if ( akina_option ( 'app_no_jsdelivr_cdn' )) {
wp_enqueue_style ( 'saukra_css' , get_stylesheet_uri (), array (), SAKURA_VERSION );
wp_enqueue_script ( 'app' , get_template_directory_uri () . '/js/sakura-app.js' , array (), SAKURA_VERSION , true );
} else {
wp_enqueue_style ( 'saukra_css' , 'https://cdn.jsdelivr.net/gh/mashirozx/Sakura@' . SAKURA_VERSION . '/style.min.css' , array (), SAKURA_VERSION );
wp_enqueue_script ( 'app' , 'https://cdn.jsdelivr.net/gh/mashirozx/Sakura@' . SAKURA_VERSION . '/js/sakura-app.min.js' , array (), SAKURA_VERSION , true );
}
2019-10-24 22:26:11 +08:00
wp_enqueue_script ( 'github_card' , 'https://cdn.jsdelivr.net/github-cards/latest/widget.js' , array (), SAKURA_VERSION , true );
2019-01-26 11:25:53 +08:00
2018-05-26 18:59:29 +08:00
if ( is_singular () && comments_open () && get_option ( 'thread_comments' ) ) {
wp_enqueue_script ( 'comment-reply' );
}
// 20161116 @Louie
$mv_live = akina_option ( 'focus_mvlive' ) ? 'open' : 'close' ;
$movies = akina_option ( 'focus_amv' ) ? array ( 'url' => akina_option ( 'amv_url' ), 'name' => akina_option ( 'amv_title' ), 'live' => $mv_live ) : 'close' ;
$auto_height = akina_option ( 'focus_height' ) ? 'fixed' : 'auto' ;
$code_lamp = 'close' ;
if ( wp_is_mobile ()) $auto_height = 'fixed' ; //拦截移动端
2019-02-23 23:32:04 +08:00
version_compare ( $GLOBALS [ 'wp_version' ], '5.1' , '>=' ) ? $reply_link_version = 'new' : $reply_link_version = 'old' ;
2018-05-26 18:59:29 +08:00
wp_localize_script ( 'app' , 'Poi' , array (
'pjax' => akina_option ( 'poi_pjax' ),
'movies' => $movies ,
'windowheight' => $auto_height ,
'codelamp' => $code_lamp ,
'ajaxurl' => admin_url ( 'admin-ajax.php' ),
'order' => get_option ( 'comment_order' ), // ajax comments
2019-02-23 23:32:04 +08:00
'formpostion' => 'bottom' , // ajax comments 默认为bottom, 如果你的表单在顶部则设置为top。
'reply_link_version' => $reply_link_version
2018-05-26 18:59:29 +08:00
));
}
add_action ( 'wp_enqueue_scripts' , 'sakura_scripts' );
/**
* load . php .
*/
require get_template_directory () . '/inc/decorate.php' ;
require get_template_directory () . '/inc/swicher.php' ;
/**
* Custom template tags for this theme .
*/
require get_template_directory () . '/inc/template-tags.php' ;
/**
* Customizer additions .
*/
require get_template_directory () . '/inc/customizer.php' ;
/**
* function update
*/
require get_template_directory () . '/inc/theme_plus.php' ;
require get_template_directory () . '/inc/categories-images.php' ;
//Comment Location Start
function convertip ( $ip ) {
2019-01-24 17:01:27 +08:00
$dat_path = dirname ( __FILE__ ) . '/inc/QQWry.Dat' ;
2018-05-26 18:59:29 +08:00
if ( ! $fd = @ fopen ( $dat_path , 'rb' )){
return 'IP date file not exists or access denied' ;
}
$ip = explode ( '.' , $ip );
2018-06-17 18:23:56 +08:00
$ipNum = intval ( $ip [ 0 ]) * 16777216 + intval ( $ip [ 1 ]) * 65536 + intval ( $ip [ 2 ]) * 256 + intval ( $ip [ 3 ]);
2018-05-26 18:59:29 +08:00
$DataBegin = fread ( $fd , 4 );
$DataEnd = fread ( $fd , 4 );
$ipbegin = implode ( '' , unpack ( 'L' , $DataBegin ));
if ( $ipbegin < 0 ) $ipbegin += pow ( 2 , 32 );
$ipend = implode ( '' , unpack ( 'L' , $DataEnd ));
if ( $ipend < 0 ) $ipend += pow ( 2 , 32 );
$ipAllNum = ( $ipend - $ipbegin ) / 7 + 1 ;
$BeginNum = 0 ;
$EndNum = $ipAllNum ;
while ( $ip1num > $ipNum || $ip2num < $ipNum ) {
$Middle = intval (( $EndNum + $BeginNum ) / 2 );
fseek ( $fd , $ipbegin + 7 * $Middle );
$ipData1 = fread ( $fd , 4 );
if ( strlen ( $ipData1 ) < 4 ) {
fclose ( $fd );
return 'System Error' ;
}
$ip1num = implode ( '' , unpack ( 'L' , $ipData1 ));
if ( $ip1num < 0 ) $ip1num += pow ( 2 , 32 );
if ( $ip1num > $ipNum ) {
$EndNum = $Middle ;
continue ;
}
$DataSeek = fread ( $fd , 3 );
if ( strlen ( $DataSeek ) < 3 ) {
fclose ( $fd );
return 'System Error' ;
}
$DataSeek = implode ( '' , unpack ( 'L' , $DataSeek . chr ( 0 )));
fseek ( $fd , $DataSeek );
$ipData2 = fread ( $fd , 4 );
if ( strlen ( $ipData2 ) < 4 ) {
fclose ( $fd );
return 'System Error' ;
}
$ip2num = implode ( '' , unpack ( 'L' , $ipData2 ));
if ( $ip2num < 0 ) $ip2num += pow ( 2 , 32 );
if ( $ip2num < $ipNum ) {
if ( $Middle == $BeginNum ) {
fclose ( $fd );
return 'Unknown' ;
}
$BeginNum = $Middle ;
}
}
$ipFlag = fread ( $fd , 1 );
if ( $ipFlag == chr ( 1 )) {
$ipSeek = fread ( $fd , 3 );
if ( strlen ( $ipSeek ) < 3 ) {
fclose ( $fd );
return 'System Error' ;
}
$ipSeek = implode ( '' , unpack ( 'L' , $ipSeek . chr ( 0 )));
fseek ( $fd , $ipSeek );
$ipFlag = fread ( $fd , 1 );
}
if ( $ipFlag == chr ( 2 )) {
$AddrSeek = fread ( $fd , 3 );
if ( strlen ( $AddrSeek ) < 3 ) {
fclose ( $fd );
return 'System Error' ;
}
$ipFlag = fread ( $fd , 1 );
if ( $ipFlag == chr ( 2 )) {
$AddrSeek2 = fread ( $fd , 3 );
if ( strlen ( $AddrSeek2 ) < 3 ) {
fclose ( $fd );
return 'System Error' ;
}
$AddrSeek2 = implode ( '' , unpack ( 'L' , $AddrSeek2 . chr ( 0 )));
fseek ( $fd , $AddrSeek2 );
} else {
fseek ( $fd , - 1 , SEEK_CUR );
}
while (( $char = fread ( $fd , 1 )) != chr ( 0 ))
$ipAddr2 .= $char ;
$AddrSeek = implode ( '' , unpack ( 'L' , $AddrSeek . chr ( 0 )));
fseek ( $fd , $AddrSeek );
while (( $char = fread ( $fd , 1 )) != chr ( 0 ))
$ipAddr1 .= $char ;
} else {
fseek ( $fd , - 1 , SEEK_CUR );
while (( $char = fread ( $fd , 1 )) != chr ( 0 ))
$ipAddr1 .= $char ;
$ipFlag = fread ( $fd , 1 );
if ( $ipFlag == chr ( 2 )) {
$AddrSeek2 = fread ( $fd , 3 );
if ( strlen ( $AddrSeek2 ) < 3 ) {
fclose ( $fd );
return 'System Error' ;
}
$AddrSeek2 = implode ( '' , unpack ( 'L' , $AddrSeek2 . chr ( 0 )));
fseek ( $fd , $AddrSeek2 );
} else {
fseek ( $fd , - 1 , SEEK_CUR );
}
while (( $char = fread ( $fd , 1 )) != chr ( 0 )){
$ipAddr2 .= $char ;
}
}
fclose ( $fd );
if ( preg_match ( '/http/i' , $ipAddr2 )) {
$ipAddr2 = '' ;
}
$ipaddr = " $ipAddr1 $ipAddr2 " ;
$ipaddr = preg_replace ( '/CZ88.Net/is' , '' , $ipaddr );
$ipaddr = preg_replace ( '/^s*/is' , '' , $ipaddr );
$ipaddr = preg_replace ( '/s*$/is' , '' , $ipaddr );
if ( preg_match ( '/http/i' , $ipaddr ) || $ipaddr == '' ) {
$ipaddr = 'Unknown' ;
}
$ipaddr = iconv ( 'gbk' , 'utf-8//IGNORE' , $ipaddr );
if ( $ipaddr != ' ' )
return $ipaddr ;
else
$ipaddr = '火星来客' ;
return $ipaddr ;
}
//Comment Location End
/**
* COMMENT FORMATTING
*
* 标准的 lazyload 输出头像
* < ? php echo str_replace ( 'src=' , 'src="https://cdn.jsdelivr.net/gh/moezx/cdn@3.0.1/img/svg/loader/index.ajax-spinner-preloader.svg" onerror="imgError(this,1)" data-src=' , get_avatar ( $comment -> comment_author_email , '80' , '' , get_comment_author (), array ( 'class' => array ( 'lazyload' ) ) ) ); ?>
*
* 如果不延时是这样的
* < ? php echo get_avatar ( $comment -> comment_author_email , '80' , '' , get_comment_author () ); ?>
*
*/
if ( ! function_exists ( 'akina_comment_format' )){
function akina_comment_format ( $comment , $args , $depth ){
$GLOBALS [ 'comment' ] = $comment ;
?>
< li < ? php comment_class (); ?> id="comment-<?php echo esc_attr(comment_ID()); ?>">
< div class = " contents " >
< div class = " comment-arrow " >
< div class = " main shadow " >
< div class = " profile " >
< a href = " <?php comment_author_url(); ?> " target = " _blank " rel = " nofollow " >< ? php echo str_replace ( 'src=' , 'src="https://cdn.jsdelivr.net/gh/moezx/cdn@3.0.2/img/svg/loader/trans.ajax-spinner-preloader.svg" onerror="imgError(this,1)" data-src=' , get_avatar ( $comment -> comment_author_email , '80' , '' , get_comment_author (), array ( 'class' => array ( 'lazyload' ) ) ) ); ?> </a>
</ div >
< div class = " commentinfo " >
< section class = " commeta " >
< div class = " left " >
< h4 class = " author " >< a href = " <?php comment_author_url(); ?> " target = " _blank " rel = " nofollow " >< ? php echo get_avatar ( $comment -> comment_author_email , '24' , '' , get_comment_author () ); ?> <span class="bb-comment isauthor" title="中央钦定的<?php #esc_attr_e('Author', 'akina'); ?>">博主</span> <?php comment_author(); ?> <?php echo get_author_class($comment->comment_author_email,$comment->user_id); ?></a></h4>
</ div >
< ? php comment_reply_link ( array_merge ( $args , array ( 'depth' => $depth , 'max_depth' => $args [ 'max_depth' ]))); ?>
< div class = " right " >
2018-06-16 23:30:41 +08:00
< div class = " info " >< time datetime = " <?php comment_date('Y-m-d'); ?> " >< ? php echo poi_time_since ( strtotime ( $comment -> comment_date_gmt ), true ); //comment_date(get_option('date_format')); ?></time><?php echo siren_get_useragent($comment->comment_agent); ?><?php echo mobile_get_useragent_icon($comment->comment_agent); ?> 来自: <?php echo convertip(get_comment_author_ip()); ?>
2018-05-26 18:59:29 +08:00
< ? php if ( current_user_can ( 'manage_options' ) and ( wp_is_mobile () == false ) ) {
$comment_ID = $comment -> comment_ID ;
$i_private = get_comment_meta ( $comment_ID , '_private' , true );
$flag .= ' <i class="fa fa-snowflake-o" aria-hidden="true"></i> 状态: <a href="javascript:;" data-actionp="set_private" data-idp="' . get_comment_id () . '" id="sp" class="sm" style="color:rgba(0,0,0,.35)">私密(<span class="has_set_private">' ;
if ( ! empty ( $i_private )) {
$flag .= '是 <i class="fa fa-lock" aria-hidden="true"></i>' ;
} else {
$flag .= '否 <i class="fa fa-unlock" aria-hidden="true"></i>' ;
}
$flag .= '</span>)</a>' ;
2019-05-28 17:20:41 +08:00
$flag .= edit_comment_link ( __ ( '<i class="fa fa-pencil-square-o" aria-hidden="true"></i> 编辑' ), '<span>' , '</span>' );
2018-05-26 18:59:29 +08:00
echo $flag ;
} ?> </div>
</ div >
</ section >
</ div >
< div class = " body " >
< ? php comment_text (); ?>
</ div >
</ div >
< div class = " arrow-left " ></ div >
</ div >
</ div >
< hr >
< ? php
}
}
/**
* 获取访客VIP样式
*/
function get_author_class ( $comment_author_email , $user_id ){
global $wpdb ;
$author_count = count ( $wpdb -> get_results (
" SELECT comment_ID as author_count FROM $wpdb->comments WHERE comment_author_email = ' $comment_author_email ' " ));
if ( $author_count >= 1 && $author_count < 5 ) //数字可自行修改,代表评论次数。
echo '<span class="showGrade0" title="萌萌哒新人~"><img src="https://cdn.jsdelivr.net/gh/moezx/cdn@3.1.9/img/Sakura/images/level/level_0.svg" style="height: 1.5em; max-height: 1.5em; display: inline-block;"></span>' ;
else if ( $author_count >= 6 && $author_count < 10 )
echo '<span class="showGrade1" title="巴拉巴拉小魔仙"><img src="https://cdn.jsdelivr.net/gh/moezx/cdn@3.1.9/img/Sakura/images/level/level_1.svg" style="height: 1.5em; max-height: 1.5em; display: inline-block;"></span>' ;
2018-05-28 18:03:40 +08:00
else if ( $author_count >= 10 && $author_count < 20 )
2018-05-26 18:59:29 +08:00
echo '<span class="showGrade2" title="初露头角"><img src="https://cdn.jsdelivr.net/gh/moezx/cdn@3.1.9/img/Sakura/images/level/level_2.svg" style="height: 1.5em; max-height: 1.5em; display: inline-block;"></span>' ;
2018-05-28 18:03:40 +08:00
else if ( $author_count >= 20 && $author_count < 40 )
2018-05-26 18:59:29 +08:00
echo '<span class="showGrade3" title="大水笔"><img src="https://cdn.jsdelivr.net/gh/moezx/cdn@3.1.9/img/Sakura/images/level/level_3.svg" style="height: 1.5em; max-height: 1.5em; display: inline-block;"></span>' ;
2018-05-28 18:03:40 +08:00
else if ( $author_count >= 40 && $author_count < 80 )
2018-05-26 18:59:29 +08:00
echo '<span class="showGrade4" title="大佬 orz"><img src="https://cdn.jsdelivr.net/gh/moezx/cdn@3.1.9/img/Sakura/images/level/level_4.svg" style="height: 1.5em; max-height: 1.5em; display: inline-block;"></span>' ;
2018-05-28 18:03:40 +08:00
else if ( $author_count >= 80 && $author_count < 160 )
2018-05-26 18:59:29 +08:00
echo '<span class="showGrade5" title="日暮里大魔王"><img src="https://cdn.jsdelivr.net/gh/moezx/cdn@3.1.9/img/Sakura/images/level/level_5.svg" style="height: 1.5em; max-height: 1.5em; display: inline-block;"></span>' ;
2018-05-28 18:03:40 +08:00
else if ( $author_count >= 160 )
2018-05-26 18:59:29 +08:00
echo '<span class="showGrade6" title="德国骨科"><img src="https://cdn.jsdelivr.net/gh/moezx/cdn@3.1.9/img/Sakura/images/level/level_6.svg" style="height: 1.5em; max-height: 1.5em; display: inline-block;"></span>' ;
}
/**
2019-06-05 18:04:41 +08:00
* post views
2018-05-26 18:59:29 +08:00
*/
function restyle_text ( $number ) {
2019-06-05 18:04:41 +08:00
switch ( akina_option ( 'statistics_format' )) {
case " type_2 " : //23,333 次访问
return number_format ( $number );
break ;
case " type_3 " : //23 333 次访问
return number_format ( $number , 0 , '.' , ' ' );
break ;
case " type_4 " : //23k 次访问
if ( $number >= 1000 ) {
return round ( $number / 1000 , 2 ) . 'k' ;
} else {
return $number ;
}
break ;
default :
return $number ;
2018-05-26 18:59:29 +08:00
}
2019-06-05 18:04:41 +08:00
2018-05-26 18:59:29 +08:00
}
function set_post_views () {
global $post ;
$post_id = intval ( $post -> ID );
$count_key = 'views' ;
$views = get_post_custom ( $post_id );
$views = intval ( $views [ 'views' ][ 0 ]);
if ( is_single () || is_page ()) {
if ( ! update_post_meta ( $post_id , 'views' , ( $views + 1 ))) {
add_post_meta ( $post_id , 'views' , 1 , true );
}
}
}
add_action ( 'get_header' , 'set_post_views' );
function get_post_views ( $post_id ) {
2019-06-05 18:04:41 +08:00
if ( akina_option ( 'statistics_api' ) == 'wp_statistics' ){
2019-06-07 17:53:06 +08:00
if ( ! function_exists ( 'wp_statistics_pages' )) {
2019-06-05 18:04:41 +08:00
return '请安装 <a href="https://wordpress.org/plugins/wp-statistics/" target="_blank">WP-Statistics 插件</a>' ;
} else {
return restyle_text ( wp_statistics_pages ( 'total' , 'uri' , $post_id ));
}
} else {
$count_key = 'views' ;
$views = get_post_custom ( $post_id );
$views = intval ( $views [ 'views' ][ 0 ]);
$post_views = intval ( post_custom ( 'views' ));
if ( $views == '' ) {
return 0 ;
} else {
return restyle_text ( $views );
}
}
2018-05-26 18:59:29 +08:00
}
/*
* Ajax点赞
*/
add_action ( 'wp_ajax_nopriv_specs_zan' , 'specs_zan' );
add_action ( 'wp_ajax_specs_zan' , 'specs_zan' );
function specs_zan (){
global $wpdb , $post ;
$id = $_POST [ " um_id " ];
$action = $_POST [ " um_action " ];
if ( $action == 'ding' ){
$specs_raters = get_post_meta ( $id , 'specs_zan' , true );
$expire = time () + 99999999 ;
$domain = ( $_SERVER [ 'HTTP_HOST' ] != 'localhost' ) ? $_SERVER [ 'HTTP_HOST' ] : false ; // make cookies work with localhost
setcookie ( 'specs_zan_' . $id , $id , $expire , '/' , $domain , false );
if ( ! $specs_raters || ! is_numeric ( $specs_raters )) {
update_post_meta ( $id , 'specs_zan' , 1 );
}
else {
update_post_meta ( $id , 'specs_zan' , ( $specs_raters + 1 ));
}
echo get_post_meta ( $id , 'specs_zan' , true );
}
die ;
}
/*
* 友情链接
*/
function get_the_link_items ( $id = null ){
$bookmarks = get_bookmarks ( 'orderby=date&category=' . $id );
$output = '' ;
if ( ! empty ( $bookmarks ) ) {
$output .= '<ul class="link-items fontSmooth">' ;
foreach ( $bookmarks as $bookmark ) {
if ( empty ( $bookmark -> link_description )) $bookmark -> link_description = '这家伙好懒╮(╯▽╰)╭' ;
if ( empty ( $bookmark -> link_image )) $bookmark -> link_image = 'https://view.moezx.cc/images/2017/12/30/Transparent_Akkarin.th.jpg' ;
$output .= '<li class="link-item"><a class="link-item-inner effect-apollo" href="' . $bookmark -> link_url . '" title="' . $bookmark -> link_description . '" target="_blank" rel="friend"><img class="lazyload" onerror="imgError(this,1)" data-src="' . $bookmark -> link_image . '" src="https://cdn.jsdelivr.net/gh/moezx/cdn@3.0.2/img/svg/loader/trans.ajax-spinner-preloader.svg"><span class="sitename">' . $bookmark -> link_name . '</span><div class="linkdes">' . $bookmark -> link_description . '</div></a></li>' ;
}
$output .= '</ul>' ;
}
return $output ;
}
function get_link_items (){
$linkcats = get_terms ( 'link_category' );
if ( ! empty ( $linkcats ) ) {
foreach ( $linkcats as $linkcat ){
2019-10-21 07:46:53 +08:00
$result .= '<h3 class="link-title"><span class="link-fix">' . $linkcat -> name . '</span></h3>' ;
2018-05-26 18:59:29 +08:00
if ( $linkcat -> description ) $result .= '<div class="link-description">' . $linkcat -> description . '</div>' ;
$result .= get_the_link_items ( $linkcat -> term_id );
}
} else {
$result = get_the_link_items ();
}
return $result ;
}
/*
* Gravatar头像使用中国服务器
*/
function gravatar_cn ( $url ){
$gravatar_url = array ( '0.gravatar.com' , '1.gravatar.com' , '2.gravatar.com' , 'secure.gravatar.com' );
return str_replace ( $gravatar_url , 'gravatar.shino.cc' , $url );
}
add_filter ( 'get_avatar_url' , 'gravatar_cn' , 4 );
/*
* 自定义默认头像
*/
add_filter ( 'avatar_defaults' , 'mytheme_default_avatar' );
function mytheme_default_avatar ( $avatar_defaults ) {
//$new_avatar_url = get_template_directory_uri() . '/images/default_avatar.png';
$new_avatar_url = 'https://cn.gravatar.com/avatar/b745710ae6b0ce9dfb13f5b7c0956be1' ;
$avatar_defaults [ $new_avatar_url ] = 'Default Avatar' ;
return $avatar_defaults ;
}
/*
* 阻止站内文章互相Pingback
*/
function theme_noself_ping ( & $links ) {
$home = get_option ( 'home' );
foreach ( $links as $l => $link )
if ( 0 === strpos ( $link , $home ) )
unset ( $links [ $l ]);
}
add_action ( 'pre_ping' , 'theme_noself_ping' );
/*
* 订制body类
*/
function akina_body_classes ( $classes ) {
// Adds a class of group-blog to blogs with more than 1 published author.
if ( is_multi_author () ) {
$classes [] = 'group-blog' ;
}
// Adds a class of hfeed to non-singular pages.
if ( ! is_singular () ) {
$classes [] = 'hfeed' ;
}
// 定制中文字体class
$classes [] = 'chinese-font' ;
/* if ( ! wp_is_mobile ()) {
$classes [] = 'serif' ;
} */
return $classes ;
}
add_filter ( 'body_class' , 'akina_body_classes' );
/*
* 图片CDN
*/
add_filter ( 'upload_dir' , 'wpjam_custom_upload_dir' );
function wpjam_custom_upload_dir ( $uploads ) {
$upload_path = '' ;
$upload_url_path = akina_option ( 'qiniu_cdn' );
if ( empty ( $upload_path ) || 'wp-content/uploads' == $upload_path ) {
$uploads [ 'basedir' ] = WP_CONTENT_DIR . '/uploads' ;
} elseif ( 0 !== strpos ( $upload_path , ABSPATH ) ) {
$uploads [ 'basedir' ] = path_join ( ABSPATH , $upload_path );
} else {
$uploads [ 'basedir' ] = $upload_path ;
}
$uploads [ 'path' ] = $uploads [ 'basedir' ] . $uploads [ 'subdir' ];
if ( $upload_url_path ) {
$uploads [ 'baseurl' ] = $upload_url_path ;
$uploads [ 'url' ] = $uploads [ 'baseurl' ] . $uploads [ 'subdir' ];
}
return $uploads ;
}
/*
* 删除自带小工具
*/
function unregister_default_widgets () {
unregister_widget ( " WP_Widget_Pages " );
unregister_widget ( " WP_Widget_Calendar " );
unregister_widget ( " WP_Widget_Archives " );
unregister_widget ( " WP_Widget_Links " );
unregister_widget ( " WP_Widget_Meta " );
unregister_widget ( " WP_Widget_Search " );
unregister_widget ( " WP_Widget_Text " );
unregister_widget ( " WP_Widget_Categories " );
unregister_widget ( " WP_Widget_Recent_Posts " );
unregister_widget ( " WP_Widget_Recent_Comments " );
unregister_widget ( " WP_Widget_RSS " );
unregister_widget ( " WP_Widget_Tag_Cloud " );
unregister_widget ( " WP_Nav_Menu_Widget " );
}
add_action ( " widgets_init " , " unregister_default_widgets " , 11 );
/**
* Jetpack setup function .
*
* See : https :// jetpack . com / support / infinite - scroll /
* See : https :// jetpack . com / support / responsive - videos /
*/
function akina_jetpack_setup () {
// Add theme support for Infinite Scroll.
add_theme_support ( 'infinite-scroll' , array (
'container' => 'main' ,
'render' => 'akina_infinite_scroll_render' ,
'footer' => 'page' ,
) );
// Add theme support for Responsive Videos.
add_theme_support ( 'jetpack-responsive-videos' );
}
add_action ( 'after_setup_theme' , 'akina_jetpack_setup' );
/**
* Custom render function for Infinite Scroll .
*/
function akina_infinite_scroll_render () {
while ( have_posts () ) {
the_post ();
if ( is_search () ) :
get_template_part ( 'tpl/content' , 'search' );
else :
get_template_part ( 'tpl/content' , get_post_format () );
endif ;
}
}
/*
* 编辑器增强
*/
function enable_more_buttons ( $buttons ) {
$buttons [] = 'hr' ;
$buttons [] = 'del' ;
$buttons [] = 'sub' ;
$buttons [] = 'sup' ;
$buttons [] = 'fontselect' ;
$buttons [] = 'fontsizeselect' ;
$buttons [] = 'cleanup' ;
$buttons [] = 'styleselect' ;
$buttons [] = 'wp_page' ;
$buttons [] = 'anchor' ;
$buttons [] = 'backcolor' ;
return $buttons ;
}
add_filter ( " mce_buttons_3 " , " enable_more_buttons " );
// 下载按钮
function download ( $atts , $content = null ) {
return '<a class="download" href="' . $content . ' " rel= " external "
target = " _blank " title = " 下载地址 " >
< span >< i class = " iconfont down icon-pulldown " ></ i > Download </ span ></ a > ' ;}
add_shortcode ( " download " , " download " );
add_action ( 'after_wp_tiny_mce' , 'bolo_after_wp_tiny_mce' );
function bolo_after_wp_tiny_mce ( $mce_settings ) {
?>
< script type = " text/javascript " >
QTags . addButton ( 'download' , '下载按钮' , " [download]下载地址[/download] " );
function bolo_QTnextpage_arg1 () {
}
</ script >
< ? php }
/*
* 后台登录页
* @ M . J
*/
//Login Page style
function custom_login () {
//echo '<link rel="stylesheet" type="text/css" href="' . get_bloginfo('template_directory') . '/inc/login.css" />'."\n";
echo '<link rel="stylesheet" type="text/css" href="' . get_site_url () . '/wp-content/themes/Sakura/inc/login.css" />' . " \n " ;
//echo '<script type="text/javascript" src="'.get_bloginfo('template_directory').'/js/jquery.min.js"></script>'."\n";
echo '<script type="text/javascript" src="https://cdn.jsdelivr.net/gh/jquery/jquery@1.8.2/jquery.min.js"></script>' . " \n " ;
}
add_action ( 'login_head' , 'custom_login' );
//Login Page Title
function custom_headertitle ( $title ) {
return get_bloginfo ( 'name' );
}
add_filter ( 'login_headertitle' , 'custom_headertitle' );
//Login Page Link
function custom_loginlogo_url ( $url ) {
return esc_url ( home_url ( '/' ) );
}
add_filter ( 'login_headerurl' , 'custom_loginlogo_url' );
//Login Page Footer
function custom_html () {
if ( akina_option ( 'login_bg' ) ) {
$loginbg = akina_option ( 'login_bg' );
} else {
$loginbg = get_bloginfo ( 'template_directory' ) . '/images/hd.png' ;
}
echo '<script type="text/javascript" src="' . get_site_url () . '/wp-content/themes/Sakura/js/login.js"></script>' . " \n " ;
echo '<script type="text/javascript">' . " \n " ;
echo 'jQuery("body").prepend("<div class=\"loading\"><img src=\"https://cdn.jsdelivr.net/gh/moezx/cdn@3.1.9/img/Sakura/images/login_loading.gif\" width=\"58\" height=\"10\"></div><div id=\"bg\"><img /></div>");' . " \n " ;
echo 'jQuery(\'#bg\').children(\'img\').attr(\'src\', \'' . $loginbg . '\').load(function(){' . " \n " ;
echo ' resizeImage(\'bg\');' . " \n " ;
echo ' jQuery(window).bind("resize", function() { resizeImage(\'bg\'); });' . " \n " ;
echo ' jQuery(\'.loading\').fadeOut();' . " \n " ;
echo '});' ;
echo '</script>' . " \n " ;
echo ' < script >
function verificationOK (){
var x , y , z = " verification " ;
var x = $ ( \ ' #loginform\').find(\'input[name="verification"]\').val();
//var x=document.forms["loginform"]["verification"].value; //原生js实现
var y = $ ( \ ' #registerform\').find(\'input[name="verification"]\').val();
var z = $ ( \ ' #lostpasswordform\').find(\'input[name="verification"]\').val();
if ( x == " verification " || y == " verification " || z == " verification " ){
alert ( " Please slide the block to verificate! " );
return false ;
}
}
$ ( document ) . ready ( function (){
$ ( \ ' < p >< div id = " verification-slider " >< div id = " slider " >< div id = " slider_bg " ></ div >< span id = " label " > » </ span >< span id = " labelTip " > Slide to Verificate </ span ></ div >< input type = " hidden " name = " verification " value = " verification " /></ div >< p > \ ' ) . insertBefore ( $ ( " .submit " ) );
$ ( \ ' form\ ' ) . attr ( \ ' onsubmit\ ' , \ ' return verificationOK (); \ ' );
2019-04-21 03:45:03 +08:00
$ ( \ 'h1 a\').attr(\'style\',\'background-image: url(' . akina_option ( 'logo_img' ) . ' ); \ ' );
2018-05-26 18:59:29 +08:00
$ ( " .forgetmenot " ) . replaceWith ( \ ' < p class = " forgetmenot " > Remember Me < input name = " rememberme " id = " rememberme " value = " forever " type = " checkbox " >< label for = " rememberme " style = " float: right;margin-top: 5px;transform: scale(2);margin-right: -10px; " ></ label ></ p > \ ' );
});
</ script > ' ;
echo ' < script type = " text/javascript " >
var startTime = 0 ;
var endTime = 0 ;
var numTime = 0 ;
$ ( function () {
var slider = new SliderUnlock ( " #slider " ,{
successLabelTip : " OK "
}, function (){
var sli_width = $ ( " #slider_bg " ) . width ();
$ ( \ ' #verification-slider\').html(\'\').append(\'<input id="verification-ok" class="input" type="text" size="25" value="OK!" name="verification" disabled="true" />\');
endTime = nowTime ();
numTime = endTime - startTime ;
endTime = 0 ;
startTime = 0 ;
// 获取到滑动使用的时间 滑动的宽度
// alert( numTime );
// alert( sli_width );
});
slider . init ();
})
/**
* 获取时间精确到毫秒
* @ type
*/
function nowTime (){
var myDate = new Date ();
var H = myDate . getHours (); //获取小时
var M = myDate . getMinutes (); //获取分钟
var S = myDate . getSeconds (); //获取秒
var MS = myDate . getMilliseconds (); //获取毫秒
var milliSeconds = H * 3600 * 1000 + M * 60 * 1000 + S * 1000 + MS ;
return milliSeconds ;
}
</ script >
< script type = " text/javascript " src = " '.get_template_directory_uri().'/user/verification.js " ></ script > ' ;
}
add_action ( 'login_footer' , 'custom_html' );
//Login message
//* Add custom message to WordPress login page
function smallenvelop_login_message ( $message ) {
if ( empty ( $message ) ){
return '<p class="message"><strong>You may try 3 times for every 5 minutes!</strong></p>' ;
} else {
return $message ;
}
}
//add_filter( 'login_message', 'smallenvelop_login_message' );
//Fix password reset bug </>
function resetpassword_message_fix ( $message ) {
$message = str_replace ( " < " , " " , $message );
$message = str_replace ( " > " , " " , $message );
return $message ;
}
add_filter ( 'retrieve_password_message' , 'resetpassword_message_fix' );
2019-05-19 17:18:32 +08:00
//Fix register email bug </>
function new_user_message_fix ( $message ) {
$show_register_ip = " 注册IP | Registration IP: " . get_the_user_ip () . " ( " . convertip ( get_the_user_ip ()) . " ) \r \n \r \n 如非本人操作请忽略此邮件 | Please ignore this email if this was not your operation. \r \n \r \n " ;
$message = str_replace ( " To set your password, visit the following address: " , $show_register_ip . " 在此设置密码 | To set your password, visit the following address: " , $message );
$message = str_replace ( " < " , " " , $message );
$message = str_replace ( " > " , " \r \n \r \n 设置密码后在此登陆 | Login here after setting password: " , $message );
return $message ;
}
add_filter ( 'wp_new_user_notification_email' , 'new_user_message_fix' );
2018-05-26 18:59:29 +08:00
/*
* 评论邮件回复
*/
function comment_mail_notify ( $comment_id ){
$mail_user_name = akina_option ( 'mail_user_name' ) ? akina_option ( 'mail_user_name' ) : 'poi' ;
$comment = get_comment ( $comment_id );
$parent_id = $comment -> comment_parent ? $comment -> comment_parent : '' ;
$spam_confirmed = $comment -> comment_approved ;
if (( $parent_id != '' ) && ( $spam_confirmed != 'spam' )){
$wp_email = $mail_user_name . '@' . preg_replace ( '#^www\.#' , '' , strtolower ( $_SERVER [ 'SERVER_NAME' ]));
$to = trim ( get_comment ( $parent_id ) -> comment_author_email );
$subject = '你在 [' . get_option ( " blogname " ) . '] 的留言有了回应' ;
$message = '
< div style = " background: white;
width : 95 % ;
max - width : 800 px ;
margin : auto auto ;
border - radius : 5 px ;
border : orange 1 px solid ;
overflow : hidden ;
- webkit - box - shadow : 0 px 0 px 20 px 0 px rgba ( 0 , 0 , 0 , 0.12 );
box - shadow : 0 px 0 px 20 px 0 px rgba ( 0 , 0 , 0 , 0.18 ); " >
< header style = " overflow: hidden; " >
< img style = " width:100%;z-index: 666; " src = " https://cdn.jsdelivr.net/gh/moezx/cdn@3.1.4/img/other/head.jpg " >
</ header >
< div style = " padding: 5px 20px; " >
< p style = " position: relative;
color : white ;
float : left ;
z - index : 999 ;
background : orange ;
padding : 5 px 30 px ;
margin : - 25 px auto 0 ;
box - shadow : 5 px 5 px 5 px rgba ( 0 , 0 , 0 , 0.30 ) " >Dear ' . trim(get_comment( $parent_id )->comment_author) . '</p>
< br >
< h3 > 您有一条来自 < a style = " text-decoration: none;color: orange " target = " _blank " href = " ' .home_url(). '/ " > '. get_option("blogname") .' </ a > 的回复 </ h3 >
< br >
< p style = " font-size: 14px; " > 您在文章《 ' . get_the_title($comment->comment_post_ID) . ' 》上发表的评论: </ p >
< p style = " border-bottom:#ddd 1px solid;border-left:#ddd 1px solid;padding-bottom:20px;background-color:#eee;margin:15px 0px;padding-left:20px;padding-right:20px;border-top:#ddd 1px solid;border-right:#ddd 1px solid;padding-top:20px " > '
. trim ( get_comment ( $parent_id ) -> comment_content ) . ' </ p >
< p style = " font-size: 14px; " > ' . trim($comment->comment_author) . ' 给您的回复如下: </ p >
< p style = " border-bottom:#ddd 1px solid;border-left:#ddd 1px solid;padding-bottom:20px;background-color:#eee;margin:15px 0px;padding-left:20px;padding-right:20px;border-top:#ddd 1px solid;border-right:#ddd 1px solid;padding-top:20px " > '
. trim ( $comment -> comment_content ) . ' </ p >
< div style = " text-align: center; " >
< img src = " https://cdn.jsdelivr.net/gh/moezx/cdn@3.1.4/img/other/hr.png " alt = " hr " style = " width:100%;
margin : 5 px auto 5 px auto ;
display : block ; " >
< a style = " text-transform: uppercase;
text - decoration : none ;
font - size : 14 px ;
border : 2 px solid #6c7575;
color : #2f3333;
padding : 10 px ;
display : inline - block ;
margin : 10 px auto 0 ; " target= " _blank " href= " ' . htmlspecialchars(get_comment_link($parent_id)) . ' " >点击查看回复的完整內容</a>
</ div >
< p style = " font-size: 12px;text-align: center;color: #999; " > 本邮件为系统自动发出,请勿直接回复 < br >
& copy ; '.date(Y).' '.get_option("blogname").' </ p >
</ div >
</ div >
' ;
$message = convert_smilies ( $message );
2018-05-26 22:12:38 +08:00
$message = str_replace ( " { { " , '<img src="https://cdn.jsdelivr.net/gh/moezx/cdn@2.9.4/img/bili/hd/ic_emoji_' , $message );
$message = str_replace ( " }} " , '.png" alt="emoji" style="height: 2em; max-height: 2em;">' , $message );
2018-05-26 18:59:29 +08:00
$message = str_replace ( '{UPLOAD}' , 'https://i.loli.net/' , $message );
$message = str_replace ( '[/img][img]' , '[/img^img]' , $message );
$message = str_replace ( '[img]' , '<img src="' , $message );
$message = str_replace ( '[/img]' , '" style="width:80%;display: block;margin-left: auto;margin-right: auto;">' , $message );
$message = str_replace ( '[/img^img]' , '" style="width:80%;display: block;margin-left: auto;margin-right: auto;"><img src="' , $message );
$from = " From: \" " . get_option ( 'blogname' ) . " \" < $wp_email > " ;
$headers = " $from\nContent -Type: text/html; charset= " . get_option ( 'blog_charset' ) . " \n " ;
wp_mail ( $to , $subject , $message , $headers );
}
}
add_action ( 'comment_post' , 'comment_mail_notify' );
/*
* 链接新窗口打开
*/
function rt_add_link_target ( $content ){
$content = str_replace ( '<a' , '<a rel="nofollow"' , $content );
// use the <a> tag to split into segments
$bits = explode ( '<a ' , $content );
// loop though the segments
foreach ( $bits as $key => $bit ){
// fix the target="_blank" bug after the link
if ( strpos ( $bit , 'href' ) === false ) continue ;
2019-07-18 15:27:48 +08:00
// fix the target="_blank" bug in the codeblock
if ( strpos ( preg_replace ( '/code([\s\S]*?)\/code[\s]*/m' , 'temp' , $content ), $bit ) === false ) continue ;
2018-05-26 18:59:29 +08:00
// find the end of each link
$pos = strpos ( $bit , '>' );
// check if there is an end (only fails with malformed markup)
if ( $pos !== false ){
// get a string with just the link's attibutes
$part = substr ( $bit , 0 , $pos );
// for comparison, get the current site/network url
$siteurl = network_site_url ();
// if the site url is in the attributes, assume it's in the href and skip, also if a target is present
if ( strpos ( $part , $siteurl ) === false && strpos ( $part , 'target=' ) === false ){
// add the target attribute
$bits [ $key ] = 'target="_blank" ' . $bits [ $key ];
}
}
}
// re-assemble the content, and return it
return implode ( '<a ' , $bits );
}
add_filter ( 'comment_text' , 'rt_add_link_target' );
// 评论通过BBCode插入图片
function comment_picture_support ( $content ) {
$content = str_replace ( 'http://' , 'https://' , $content ); // 干掉任何可能的 http
$content = str_replace ( '{UPLOAD}' , 'https://i.loli.net/' , $content );
$content = str_replace ( '[/img][img]' , '[/img^img]' , $content );
$content = str_replace ( '[img]' , '<br><img src="https://cdn.jsdelivr.net/gh/moezx/cdn@3.0.2/img/svg/loader/trans.ajax-spinner-preloader.svg" data-src="' , $content );
$content = str_replace ( '[/img]' , '" class="lazyload comment_inline_img" onerror="imgError(this)"><br>' , $content );
$content = str_replace ( '[/img^img]' , '" class="lazyload comment_inline_img" onerror="imgError(this)"><img src="https://cdn.jsdelivr.net/gh/moezx/cdn@3.0.2/img/svg/loader/trans.ajax-spinner-preloader.svg" data-src="' , $content );
return $content ;
}
add_filter ( 'comment_text' , 'comment_picture_support' );
/*
* 修改评论表情调用路径
*/
add_filter ( 'smilies_src' , 'custom_smilies_src' , 1 , 10 );
function custom_smilies_src ( $img_src , $img , $siteurl ){
return 'https://cdn.jsdelivr.net/gh/moezx/cdn@3.1.9/img/Sakura/images/smilies/' . $img ;
}
// 简单遍历系统表情库,今后应考虑标识表情包名——使用增加的扩展名,同时保留原有拓展名
// 还有一个思路是根据表情调用路径来判定<-- 此法最好!
// 贴吧
function push_smilies (){
global $wpsmiliestrans ;
foreach ( $wpsmiliestrans as $k => $v ) {
$Sname = str_replace ( " : " , " " , $k );
$Svalue = $v ;
$return_smiles = $return_smiles . '<span title="' . $Sname . '" onclick="grin(' . " ' " . $Sname . " ' " . ')"><img src="https://cdn.jsdelivr.net/gh/moezx/cdn@3.1.9/img/Sakura/images/smilies/' . $Svalue . '" /></span>' ;
}
return $return_smiles ;
}
function smilies_reset () {
global $wpsmiliestrans ;
// don't bother setting up smilies if they are disabled
if ( ! get_option ( 'use_smilies' ) )
return ;
2019-06-25 21:32:24 +08:00
$wpsmiliestrans = array (
2018-05-26 18:59:29 +08:00
':good:' => 'icon_good.gif' ,
':han:' => 'icon_han.gif' ,
':spray:' => 'icon_spray.gif' ,
':Grievance:' => 'icon_Grievance.gif' ,
':shui:' => 'icon_shui.gif' ,
':reluctantly:' => 'icon_reluctantly.gif' ,
':anger:' => 'icon_anger.gif' ,
':tongue:' => 'icon_tongue.gif' ,
':se:' => 'icon_se.gif' ,
':haha:' => 'icon_haha.gif' ,
':rmb:' => 'icon_rmb.gif' ,
':doubt:' => 'icon_doubt.gif' ,
':tear:' => 'icon_tear.gif' ,
':surprised2:' => 'icon_surprised2.gif' ,
':Happy:' => 'icon_Happy.gif' ,
':ku:' => 'icon_ku.gif' ,
':surprised:' => 'icon_surprised.gif' ,
':theblackline:' => 'icon_theblackline.gif' ,
':smilingeyes:' => 'icon_smilingeyes.gif' ,
':spit:' => 'icon_spit.gif' ,
':huaji:' => 'icon_huaji.gif' ,
':bbd:' => 'icon_bbd.gif' ,
':hu:' => 'icon_hu.gif' ,
':shame:' => 'icon_shame.gif' ,
':naive:' => 'icon_naive.gif' ,
':rbq:' => 'icon_rbq.gif' ,
':britan:' => 'icon_britan.gif' ,
':aa:' => 'icon_aa.gif' ,
':niconiconi:' => 'icon_niconiconi.gif' ,
':niconiconi-t:' => 'icon_niconiconi_t.gif' ,
':niconiconit:' => 'icon_niconiconit.gif' ,
':awesome:' => 'icon_awesome.gif' ,
2019-06-25 21:32:24 +08:00
);
2018-05-26 18:59:29 +08:00
}
smilies_reset ();
function push_emoji_panel () {
return '
< a class = " emoji-item " > ( ⌒▽⌒ ) </ a >
< a class = " emoji-item " > ( ̄▽ ̄) </ a >
< a class = " emoji-item " > ( = ・ω・ = ) </ a >
< a class = " emoji-item " > ( `・ω・´ ) </ a >
< a class = " emoji-item " > ( 〜 ̄△ ̄ ) 〜 </ a >
< a class = " emoji-item " > ( ・∀・ ) </ a >
< a class = " emoji-item " > ( °∀° ) ノ </ a >
< a class = " emoji-item " > (  ̄3 ̄ ) </ a >
< a class = " emoji-item " > ╮ (  ̄▽ ̄ ) ╭ </ a >
< a class = " emoji-item " > ( ´ _ゝ` ) </ a >
< a class = " emoji-item " > ←_← </ a >
< a class = " emoji-item " > →_→ </ a >
< a class = " emoji-item " > ( & lt ; _ & lt ;) </ a >
< a class = " emoji-item " > ( & gt ; _ & gt ;) </ a >
< a class = " emoji-item " > (; ¬_¬ ) </ a >
< a class = " emoji-item " > ( " ▔□▔)/</a>
< a class = " emoji-item " > ( ゚Д゚≡゚д゚ ) ! ? </ a >
< a class = " emoji-item " > Σ ( ゚д゚ ;) </ a >
< a class = " emoji-item " > Σ (  ̄□ ̄ || ) </ a >
< a class = " emoji-item " > ( ’;ω;‘ ) </ a >
< a class = " emoji-item " > ( / TДT ) /</ a >
< a class = " emoji-item " > ( ^ ・ω・ ^ ) </ a >
< a class = " emoji-item " > ( 。・ω・。 ) </ a >
< a class = " emoji-item " > ( ● ̄ ( エ )  ̄● ) </ a >
< a class = " emoji-item " > ε = ε = ( ノ≧∇≦ ) ノ </ a >
< a class = " emoji-item " > ( ’ ・_・‘ ) </ a >
< a class = " emoji-item " > ( - _ - #)</a>
< a class = " emoji-item " > ( ̄へ ̄) </ a >
< a class = " emoji-item " > (  ̄ε ( # ̄)Σ</a>
< a class = " emoji-item " > ヽ ( ‘Д’ ) ノ </ a >
< a class = " emoji-item " > ( #-_-)┯━┯</a>
< a class = " emoji-item " > ( ╯°口° ) ╯ ( ┴—┴ </ a >
< a class = " emoji-item " > ←◡← </ a >
< a class = " emoji-item " > ( ♥д♥ ) </ a >
< a class = " emoji-item " > _ ( : 3 」∠ ) _ </ a >
< a class = " emoji-item " > Σ & gt ; ― ( 〃°ω°〃 ) ♡→ </ a >
< a class = " emoji-item " > ⁄ ( ⁄ ⁄•⁄ω⁄•⁄ ⁄ ) ⁄ </ a >
< a class = " emoji-item " > ( ╬゚д゚ ) ▄︻┻┳═一 </ a >
< a class = " emoji-item " > ・ * ・ : ≡ ( ε : ) </ a >
< a class = " emoji-item " > ( 笑 ) </ a >
< a class = " emoji-item " > ( 汗 ) </ a >
< a class = " emoji-item " > ( 泣 ) </ a >
< a class = " emoji-item " > ( 苦笑 ) </ a >
' ;
}
function get_wp_root_path () {
$base = dirname ( __FILE__ );
$path = false ;
if ( @ file_exists ( dirname ( dirname ( $base ))))
{
$path = dirname ( dirname ( $base ));
}
else
if ( @ file_exists ( dirname ( dirname ( dirname ( $base )))))
{
$path = dirname ( dirname ( dirname ( $base )));
}
else
$path = false ;
if ( $path != false )
{
$path = str_replace ( " \\ " , " / " , $path );
}
return $path ;
}
// bilibili smiles
$bilismiliestrans = array ();
function push_bili_smilies (){
global $bilismiliestrans ;
$smiles_path = get_wp_root_path () . " /themes/Sakura/images/smilies/bili/ " ;
$name = array ( 'baiyan' , 'fadai' , 'koubi' , 'qinqin' , 'weiqu' , 'bishi' , 'fanu' , 'kun' , 'se' , 'weixiao' , 'bizui' , 'ganga' , 'lengmo' , 'shengbing' , 'wunai' , 'chan' , 'guilian' , 'liubixue' , 'shengqi' , 'xiaoku' , 'daku' , 'guzhang' , 'liuhan' , 'shuizhao' , 'xieyanxiao' , 'dalao' , 'haixiu' , 'liulei' , 'sikao' , 'yiwen' , 'dalian' , 'heirenwenhao' , 'miantian' , 'tiaokan' , 'yun' , 'dianzan' , 'huaixiao' , 'mudengkoudai' , 'tiaopi' , 'zaijian' , 'doge' , 'jingxia' , 'nanguo' , 'touxiao' , 'zhoumei' , 'facai' , 'keai' , 'outu' , 'tuxue' , 'zhuakuang' );
$return_smiles = '' ;
for ( $i = 0 ; $i < count ( $name ); $i ++ ){
$img_size = getimagesize ( $smiles_path . $name [ $i ] . " .png " );
$img_height = $img_size [ " 1 " ];
// 选择面版
$return_smiles = $return_smiles . '<span class="emotion-secter emotion-item emotion-select-parent" onclick="grin(' . " ' " . $name [ $i ] . " ' " . ',type = \'Math\')" style="background-image: url(https://cdn.jsdelivr.net/gh/moezx/cdn@2.9.4/img/bili/hd/ic_emoji_' . $name [ $i ] . '.png);"><div class="img emotion-select-child" style="background-image: url(https://cdn.jsdelivr.net/gh/moezx/cdn@2.9.4/img/bili/' . $name [ $i ] . ' . png );
animation - duration : ' .($img_height / 32 * 40). ' ms ;
animation - timing - function : steps ( ' .($img_height / 32). ' );
transform : translateY ( - ' .($img_height - 32). ' px );
height : ' .$img_height. ' px ;
" ></div></span>';
// 正文转换
2018-05-26 22:12:38 +08:00
$bilismiliestrans [ '{{' . $name [ $i ] . '}}' ] = '<span class="emotion-inline emotion-item"><img src="https://cdn.jsdelivr.net/gh/moezx/cdn@2.9.4/img/bili/' . $name [ $i ] . ' . png " class= " img " style= " /*background-image: url();*/
2018-05-26 18:59:29 +08:00
animation - duration : ' .($img_height / 32 * 40). ' ms ;
animation - timing - function : steps ( ' .($img_height / 32). ' );
transform : translateY ( - ' .($img_height - 32). ' px );
height : ' .$img_height. ' px ;
" ></span>';
}
return $return_smiles ;
}
push_bili_smilies ();
function bili_smile_filter ( $content ) {
global $bilismiliestrans ;
$content = str_replace ( array_keys ( $bilismiliestrans ), $bilismiliestrans , $content );
return $content ;
}
add_filter ( 'the_content' , 'bili_smile_filter' ); //替换文章关键词
add_filter ( 'comment_text' , 'bili_smile_filter' ); //替换评论关键词
function featuredtoRSS ( $content ) {
global $post ;
if ( has_post_thumbnail ( $post -> ID ) ){
$content = '<div>' . get_the_post_thumbnail ( $post -> ID , 'medium' , array ( 'style' => 'margin-bottom: 15px;' ) ) . '</div>' . $content ;
}
return $content ;
}
add_filter ( 'the_excerpt_rss' , 'featuredtoRSS' );
add_filter ( 'the_content_feed' , 'featuredtoRSS' );
//
function bili_smile_filter_rss ( $content ) {
2018-05-26 22:12:38 +08:00
$content = str_replace ( " { { " , '<img src="https://cdn.jsdelivr.net/gh/moezx/cdn@2.9.4/img/bili/hd/ic_emoji_' , $content );
$content = str_replace ( " }} " , '.png" alt="emoji" style="height: 2em; max-height: 2em;">' , $content );
2018-05-26 18:59:29 +08:00
$content = str_replace ( '[img]' , '<img src="' , $content );
$content = str_replace ( '[/img]' , '" style="display: block;margin-left: auto;margin-right: auto;">' , $content );
return $content ;
}
add_filter ( 'comment_text_rss' , 'bili_smile_filter_rss' ); //替换评论rss关键词
function toc_support ( $content ) {
$content = str_replace ( '[toc]' , '<div class="has-toc have-toc"></div>' , $content ); // TOC 支持
$content = str_replace ( '[begin]' , '<span class="begin">' , $content ); // 首字格式支持
$content = str_replace ( '[/begin]' , '</span>' , $content ); // 首字格式支持
return $content ;
}
add_filter ( 'the_content' , 'toc_support' );
add_filter ( 'the_excerpt_rss' , 'toc_support' );
add_filter ( 'the_content_feed' , 'toc_support' );
// Markdown parser
/* 处理超时??
function markdown_parser ( $content ) {
include 'inc/Parsedown.php' ;
$Parsedown = new Parsedown ();
$content = $Parsedown -> text ( $content );
return $content ;
}
add_filter ( 'comment_text' , 'markdown_parser' );
*/
// 显示访客当前 IP
function get_the_user_ip () {
if ( ! empty ( $_SERVER [ 'HTTP_CLIENT_IP' ] ) ) {
//check ip from share internet
$ip = $_SERVER [ 'HTTP_CLIENT_IP' ];
} elseif ( ! empty ( $_SERVER [ 'HTTP_X_FORWARDED_FOR' ] ) ) {
//to check ip is pass from proxy
$ip = $_SERVER [ 'HTTP_X_FORWARDED_FOR' ];
} else {
$ip = $_SERVER [ 'REMOTE_ADDR' ];
}
return apply_filters ( 'wpb_get_ip' , $ip );
}
add_shortcode ( 'show_ip' , 'get_the_user_ip' );
/*歌词*/
function hero_get_lyric () {
/** These are the lyrics to Hero */
$lyrics = " " ;
// Here we split it into lines
$lyrics = explode ( " \n " , $lyrics );
// And then randomly choose a line
return wptexturize ( $lyrics [ mt_rand ( 0 , count ( $lyrics ) - 1 ) ] );
}
// This just echoes the chosen line, we'll position it later
function hello_hero () {
$chosen = hero_get_lyric ();
echo $chosen ;
}
/*私密评论*/
add_action ( 'wp_ajax_nopriv_siren_private' , 'siren_private' );
add_action ( 'wp_ajax_siren_private' , 'siren_private' );
function siren_private (){
$comment_id = $_POST [ " p_id " ];
$action = $_POST [ " p_action " ];
if ( $action == 'set_private' ) {
update_comment_meta ( $comment_id , '_private' , 'true' );
$i_private = get_comment_meta ( $comment_ID , '_private' , true );
if ( ! empty ( $i_private )) {
echo '否' ;
} else {
echo '是' ;
}
}
die ;
}
//时间序列
function memory_archives_list () {
if ( true ){
$output = '<div id="archives"><p style="text-align:right;">[<span id="al_expand_collapse">全部展开/收缩</span>]<!-- (注: 点击月份可以展开)--></p>' ;
$the_query = new WP_Query ( 'posts_per_page=-1&ignore_sticky_posts=1&post_type=post' ); //update: 加上忽略置顶文章
$year = 0 ; $mon = 0 ; $i = 0 ; $j = 0 ;
while ( $the_query -> have_posts () ) : $the_query -> the_post ();
$year_tmp = get_the_time ( 'Y' );
$mon_tmp = get_the_time ( 'm' );
$y = $year ; $m = $mon ;
if ( $mon != $mon_tmp && $mon > 0 ) $output .= '</ul></li>' ;
if ( $year != $year_tmp && $year > 0 ) $output .= '</ul>' ;
if ( $year != $year_tmp ) {
$year = $year_tmp ;
$output .= '<h3 class="al_year">' . $year . ' 年</h3><ul class="al_mon_list">' ; //输出年份
}
if ( $mon != $mon_tmp ) {
$mon = $mon_tmp ;
$output .= '<li class="al_li"><span class="al_mon">' . $mon . '月 (<span id="post-num"></span>篇文章)</span><ul class="al_post_list">' ; //输出月份
}
2019-06-07 13:06:40 +08:00
$output .= '<li>' . '<a href="' . get_permalink () . '"><span style="color:#0bf;">' . get_the_time ( 'd日 ' ) . '</span>' . get_the_title () . ' <span>(' . get_post_views ( get_the_ID ()) . ' <span class="fa fa-fire" aria-hidden="true"></span> / ' . get_comments_number ( '0' , '1' , '%' ) . ' <span class="fa fa-commenting" aria-hidden="true"></span>)</span></a></li>' ; //输出文章日期和标题
2018-05-26 18:59:29 +08:00
endwhile ;
wp_reset_postdata ();
$output .= '</ul></li></ul> <!--<ul class="al_mon_list"><li><ul class="al_post_list" style="display: block;"><li>博客已经萌萌哒运行了<span id="monitorday"></span>天</li></ul></li></ul>--></div>' ;
#update_option('memory_archives_list', $output);
}
echo $output ;
}
/*
* 隐藏 Dashboard
*/
/* Remove the "Dashboard" from the admin menu for non-admin users */
function remove_dashboard () {
global $current_user , $menu , $submenu ;
get_currentuserinfo ();
if ( ! in_array ( 'administrator' , $current_user -> roles ) ) {
reset ( $menu );
$page = key ( $menu );
while ( ( __ ( 'Dashboard' ) != $menu [ $page ][ 0 ] ) && next ( $menu ) ) {
$page = key ( $menu );
}
if ( __ ( 'Dashboard' ) == $menu [ $page ][ 0 ] ) {
unset ( $menu [ $page ] );
}
reset ( $menu );
$page = key ( $menu );
while ( ! $current_user -> has_cap ( $menu [ $page ][ 1 ] ) && next ( $menu ) ) {
$page = key ( $menu );
}
if ( preg_match ( '#wp-admin/?(index.php)?$#' , $_SERVER [ 'REQUEST_URI' ] ) &&
( 'index.php' != $menu [ $page ][ 2 ] ) ) {
wp_redirect ( get_option ( 'siteurl' ) . '/wp-admin/profile.php' );
}
}
}
add_action ( 'admin_menu' , 'remove_dashboard' );
/**
2019-02-16 11:02:15 +08:00
* Filter the except length to 20 words . 限制摘要长度
2018-05-26 18:59:29 +08:00
*
* @ param int $length Excerpt length .
* @ return int ( Maybe ) modified excerpt length .
*/
2019-02-16 11:02:15 +08:00
function GBsubstr ( $string , $start , $length ) {
if ( strlen ( $string ) > $length ) {
$str = null ;
$len = 0 ;
$i = $start ;
while ( $len < $length ) {
if ( ord ( substr ( $string , $i , 1 )) > 0xc0 ) {
$str .= substr ( $string , $i , 3 );
$i += 3 ;
} elseif ( ord ( substr ( $string , $i , 1 )) > 0xa0 ) {
$str .= substr ( $string , $i , 2 );
$i += 2 ;
} else {
$str .= substr ( $string , $i , 1 );
$i ++ ;
}
$len ++ ;
}
return $str ;
} else {
return $string ;
}
}
function excerpt_length ( $exp ) {
2019-02-18 12:43:03 +08:00
if ( ! function_exists ( 'mb_substr' )) {
2019-02-16 11:02:15 +08:00
$exp = GBsubstr ( $exp , 0 , 80 );
} else {
/*
* To use mb_substr () function , you should uncomment " extension=php_mbstring.dll " in php . ini
*/
$exp = mb_substr ( $exp , 0 , 80 );
}
return $exp ;
2018-05-26 18:59:29 +08:00
}
2019-02-16 11:02:15 +08:00
add_filter ( 'the_excerpt' , 'excerpt_length' );
2018-05-26 18:59:29 +08:00
/*
* 后台路径
*/
/*
add_filter ( 'site_url' , 'wpadmin_filter' , 10 , 3 );
function wpadmin_filter ( $url , $path , $orig_scheme ) {
$old = array ( " /(wp-admin)/ " );
$admin_dir = WP_ADMIN_DIR ;
$new = array ( $admin_dir );
return preg_replace ( $old , $new , $url , 1 );
}
*/
2019-05-27 03:48:21 +08:00
function admin_ini () {
2018-05-26 18:59:29 +08:00
wp_enqueue_style ( 'admin-styles-fix-icon' , get_site_url () . '/wp-includes/css/dashicons.css' );
2019-05-27 03:48:21 +08:00
wp_enqueue_style ( 'cus-styles-fit' , get_site_url () . '/wp-content/themes/Sakura/inc/css/dashboard-fix.css' );
wp_enqueue_script ( 'lazyload' , 'https://cdn.jsdelivr.net/npm/lazyload@2.0.0-beta.2/lazyload.min.js' );
2018-05-26 18:59:29 +08:00
}
2019-05-27 03:48:21 +08:00
add_action ( 'admin_enqueue_scripts' , 'admin_ini' );
2018-05-26 18:59:29 +08:00
2019-02-16 11:02:15 +08:00
function custom_admin_js () {
echo ' < script >
window . onload = function (){
lazyload ();
2019-02-20 00:20:17 +08:00
try {
document . querySelector ( " #scheme-tip .notice-dismiss " ) . addEventListener ( " click " , function (){
location . href = " ?scheme-tip-dismissed'.BUILD_VERSION.' " ;
});
} catch ( e ){}
2019-02-16 11:02:15 +08:00
}
</ script > ' ;
}
add_action ( 'admin_footer' , 'custom_admin_js' );
2018-05-26 18:59:29 +08:00
/*
* 后台通知
*/
2019-05-27 03:48:21 +08:00
function scheme_tip () {
2019-05-27 03:58:13 +08:00
$msg = '<b>Why not try the new admin dashboard color scheme <a href="/wp-admin/profile.php">here</a>?</b>' ;
2018-05-26 18:59:29 +08:00
if ( get_user_locale ( get_current_user_id () ) == " zh_CN " ) {
2019-05-27 03:58:13 +08:00
$msg = '<b>试一试新后台界面<a href="/wp-admin/profile.php">配色方案</a>吧?</b>' ;
2018-05-26 18:59:29 +08:00
}
if ( get_user_locale ( get_current_user_id () ) == " zh_TW " ) {
2019-05-27 03:58:13 +08:00
$msg = '<b>試一試新後台界面<a href="/wp-admin/profile.php">色彩配置</a>吧?</b>' ;
2018-05-26 18:59:29 +08:00
}
if ( get_user_locale ( get_current_user_id () ) == " ja " ) {
2019-05-27 03:58:13 +08:00
$msg = '<b>新しい<a href="/wp-admin/profile.php">管理画面の配色</a>を試しますか?</b>' ;
2018-05-26 18:59:29 +08:00
}
if ( get_user_locale ( get_current_user_id () ) == " ja-JP " ) {
2019-05-27 03:58:13 +08:00
$msg = '<b>新しい<a href="/wp-admin/profile.php">管理画面の配色</a>を試しますか?</b>' ;
2018-05-26 18:59:29 +08:00
}
2019-02-16 11:02:15 +08:00
$user_id = get_current_user_id ();
if ( ! get_user_meta ( $user_id , 'scheme-tip-dismissed' . BUILD_VERSION ) ) {
echo '<div class="notice notice-success is-dismissible" id="scheme-tip"><p><b>' . $msg . '</b></p></div>' ;
}
2018-05-26 18:59:29 +08:00
}
2019-05-27 03:48:21 +08:00
add_action ( 'admin_notices' , 'scheme_tip' );
2019-02-16 11:02:15 +08:00
function scheme_tip_dismissed () {
$user_id = get_current_user_id ();
if ( isset ( $_GET [ 'scheme-tip-dismissed' . BUILD_VERSION ] ) )
add_user_meta ( $user_id , 'scheme-tip-dismissed' . BUILD_VERSION , 'true' , true );
2018-05-26 18:59:29 +08:00
}
2019-02-16 11:02:15 +08:00
add_action ( 'admin_init' , 'scheme_tip_dismissed' );
2018-05-26 18:59:29 +08:00
2019-05-27 03:48:21 +08:00
//dashboard scheme
function dash_scheme ( $key , $name , $col1 , $col2 , $col3 , $col4 , $base , $focus , $current , $rules = " " ){
$hash = " color_1= " . str_replace ( " # " , " " , $col1 ) .
" &color_2= " . str_replace ( " # " , " " , $col2 ) .
" &color_3= " . str_replace ( " # " , " " , $col3 ) .
" &color_4= " . str_replace ( " # " , " " , $col4 ) .
" &rules= " . urlencode ( $rules );
wp_admin_css_color (
$key ,
$name ,
get_template_directory_uri () . " /inc/dash-scheme.php? " . $hash ,
array ( $col1 , $col2 , $col3 , $col4 ),
array ( 'base' => $base , 'focus' => $focus , 'current' => $current )
);
}
//Sakura
dash_scheme ( $key = " sakura " , $name = " Sakura🌸 " ,
$col1 = '#8fbbb1' , $col2 = '#bfd8d2' , $col3 = '#fedcd2' , $col4 = '#df744a' ,
$base = " #e5f8ff " , $focus = " #fff " , $current = " #fff " ,
2019-05-27 14:57:12 +08:00
$rules = " #adminmenu .wp-has-current-submenu .wp-submenu a,#adminmenu .wp-has-current-submenu.opensub .wp-submenu a,#adminmenu .wp-submenu a,#adminmenu a.wp-has-current-submenu:focus+.wp-submenu a,#wpadminbar .ab-submenu .ab-item,#wpadminbar .quicklinks .menupop ul li a,#wpadminbar .quicklinks .menupop.hover ul li a,#wpadminbar.nojs .quicklinks .menupop:hover ul li a,.folded #adminmenu .wp-has-current-submenu .wp-submenu a { color:#f3f2f1}body { background-image:url(https://view.moezx.cc/images/2018/01/03/sakura.png);background-attachment:fixed;}#wpcontent { background:rgba(255,255,255,.0)}.wp-core-ui .button-primary { background:#bfd8d2!important;border-color:#8fbbb1 #8fbbb1 #8fbbb1!important;color:#fff!important;box-shadow:0 1px 0 #8fbbb1!important;text-shadow:0 -1px 1px #8fbbb1,1px 0 1px #8fbbb1,0 1px 1px #8fbbb1,-1px 0 1px #8fbbb1!important} " );
2019-05-27 03:48:21 +08:00
//custom
dash_scheme ( $key = " custom " , $name = " Custom " ,
$col1 = akina_option ( 'dash_scheme_color_a' ), $col2 = akina_option ( 'dash_scheme_color_b' ), $col3 = akina_option ( 'dash_scheme_color_c' ), $col4 = akina_option ( 'dash_scheme_color_d' ),
$base = akina_option ( 'dash_scheme_color_base' ), $focus = akina_option ( 'dash_scheme_color_focus' ), $current = akina_option ( 'dash_scheme_color_current' ),
$rules = akina_option ( 'dash_scheme_css_rules' ));
2019-05-28 17:20:41 +08:00
//Set Default Admin Color Scheme for New Users
function set_default_admin_color ( $user_id ) {
$args = array (
'ID' => $user_id ,
'admin_color' => 'sunrise'
);
wp_update_user ( $args );
}
//add_action('user_register', 'set_default_admin_color');
//Stop Users From Switching Admin Color Schemes
//if ( !current_user_can('manage_options') ) remove_action( 'admin_color_scheme_picker', 'admin_color_scheme_picker' );
2019-05-27 03:48:21 +08:00
// WordPress Custom Font @ Admin
function custom_admin_open_sans_font () {
echo '<link href="https://fonts.googleapis.com/css?family=Noto+Serif+SC&display=swap" rel="stylesheet">' . PHP_EOL ;
echo '<style>body, #wpadminbar *:not([class="ab-icon"]), .wp-core-ui, .media-menu, .media-frame *, .media-modal *{font-family:"Noto Serif SC","Source Han Serif SC","Source Han Serif","source-han-serif-sc","PT Serif","SongTi SC","MicroSoft Yahei",Georgia,serif !important;}</style>' . PHP_EOL ;
}
add_action ( 'admin_head' , 'custom_admin_open_sans_font' );
// WordPress Custom Font @ Admin Frontend Toolbar
function custom_admin_open_sans_font_frontend_toolbar () {
if ( current_user_can ( 'administrator' )) {
echo '<link href="https://fonts.googleapis.com/css?family=Noto+Serif+SC&display=swap" rel="stylesheet">' . PHP_EOL ;
echo '<style>#wpadminbar *:not([class="ab-icon"]){font-family:"Noto Serif SC","Source Han Serif SC","Source Han Serif","source-han-serif-sc","PT Serif","SongTi SC","MicroSoft Yahei",Georgia,serif !important;}</style>' . PHP_EOL ;
}
}
add_action ( 'wp_head' , 'custom_admin_open_sans_font_frontend_toolbar' );
// WordPress Custom Font @ Admin Login
function custom_admin_open_sans_font_login_page () {
if ( stripos ( $_SERVER [ " SCRIPT_NAME " ], strrchr ( wp_login_url (), '/' )) !== false ) {
echo '<link href="https://fonts.googleapis.com/css?family=Noto+Serif+SC&display=swap" rel="stylesheet">' . PHP_EOL ;
echo '<style>body{font-family:"Noto Serif SC","Source Han Serif SC","Source Han Serif","source-han-serif-sc","PT Serif","SongTi SC","MicroSoft Yahei",Georgia,serif !important;}</style>' . PHP_EOL ;
}
}
add_action ( 'login_head' , 'custom_admin_open_sans_font_login_page' );
2018-05-26 18:59:29 +08:00
// 阻止垃圾注册
add_action ( 'register_post' , 'codecheese_register_post' , 10 , 3 );
function codecheese_register_post ( $sanitized_user_login , $user_email , $errors ) {
// Blocked domains
$domains = array ( 'net.buzzcluby.com' ,
'buzzcluby.com' ,
'mail.ru' ,
'h.captchaeu.info' ,
'edge.codyting.com' );
// Get visitor email domain
$email = explode ( '@' , $user_email );
// Check and display error message for the registration form if exists
if ( in_array ( $email [ 1 ], $domains ) )
$errors -> add ( 'invalid_email' , __ ( '<b>ERROR</b>: This email domain (<b>@' . $email [ 1 ] . '</b>) has been blocked. Please use another email.' ));
}
2019-01-24 17:01:27 +08:00
// html 标签处理器
function html_tag_parser ( $content ) {
2019-10-28 20:52:29 +08:00
if ( ! is_feed ()) {
$content = preg_replace (
'/<img(.+)src=[\'"]([^\'"]+)[\'"](.*)>/i' ,
" <img $ 1 class= \" lazyload \" data-src= \" $ 2 \" src= \" https://cdn.jsdelivr.net/gh/moezx/cdn@3.0.2/img/svg/loader/trans.ajax-spinner-preloader.svg \" onerror= \" imgError(this) \" $ 3 > \n <noscript> $ 0</noscript> " ,
$content
);
2019-01-24 17:01:27 +08:00
//Fancybox
/* Markdown Regex Pattern for Matching URLs :
* https :// daringfireball . net / 2010 / 07 / improved_regex_for_matching_urls
*/
2019-10-28 20:52:29 +08:00
$url_regex = '((?:https?:\/\/|www\d{0,3}[.]|[a-z0-9.\-]+[.][a-z]{2,4}\/)(?:[^\s()<>]+|\(([^\s()<>]+|(\([^\s()<>]+\)))*\))+(?:\(([^\s()<>]+|(\([^\s()<>]+\)))*\)|[^\s`!()\[\]{};:\'".,<>?«»“”‘’]))' ;
2019-01-24 17:01:27 +08:00
//With Thumbnail: !{alt}(url)[th_url]
2019-10-28 20:52:29 +08:00
if ( preg_match_all ( '/\!\{.*?\)\[.*?\]/i' , $content , $matches )){
$i = 0 ;
foreach ( $matches as $val ) {
$content = str_replace ( $val [ $i ], preg_replace (
'/!\{([^\{\}]+)*\}\(' . $url_regex . '\)\[' . $url_regex . '\]/i' ,
' < a data - fancybox = " gallery "
data - caption = " $ 1 "
class = " fancybox "
href = " $ 2 "
alt = " $ 1 "
title = " $ 1 " >< img src = " $ 7 " target = " _blank " rel = " nofollow " class = " fancybox " ></ a > ' ,
$val [ $i ]),
$content );
$i ++ ;
}
}
2019-01-24 17:01:27 +08:00
//Without Thumbnail :!{alt}(url)
$content = preg_replace (
'/!\{([^\{\}]+)*\}\(' . $url_regex . '\)/i' ,
' < a data - fancybox = " gallery "
data - caption = " $ 1 "
class = " fancybox "
href = " $ 2 "
alt = " $ 1 "
title = " $ 1 " >< img src = " $ 2 " target = " _blank " rel = " nofollow " class = " fancybox " ></ a > ' ,
$content
);
2019-10-24 22:26:11 +08:00
//Github cards
$content = preg_replace (
'/\[github repo=[\'"]([^\'"]+)[\'"]\]/i' ,
'
< iframe frameborder = " 0 " scrolling = " 0 " allowtransparency = " true "
src = " https://api.2heng.xin/github-card/?repo= $ 1 "
width = " 400 " height = " 153 "
style = " margin-left: 50%; transform: translateX(-50%); " ></ iframe >
' ,
$content
);
2018-05-26 18:59:29 +08:00
}
return $content ;
}
2019-01-24 17:01:27 +08:00
add_filter ( 'the_content' , 'html_tag_parser' ); //替换文章关键词
//add_filter( 'comment_text', 'html_tag_parser' );//替换评论关键词
2018-05-26 18:59:29 +08:00
/*
* QQ 评论
*/
// 数据库插入评论表单的qq字段
2019-01-24 17:01:27 +08:00
add_action ( 'wp_insert_comment' , 'sql_insert_qq_field' , 10 , 2 );
function sql_insert_qq_field ( $comment_ID , $commmentdata ) {
2018-05-26 18:59:29 +08:00
$qq = isset ( $_POST [ 'new_field_qq' ]) ? $_POST [ 'new_field_qq' ] : false ;
update_comment_meta ( $comment_ID , 'new_field_qq' , $qq ); // new_field_qq 是表单name值, 也是存储在数据库里的字段名字
}
// 后台评论中显示qq字段
add_filter ( 'manage_edit-comments_columns' , 'add_comments_columns' );
add_action ( 'manage_comments_custom_column' , 'output_comments_qq_columns' , 10 , 2 );
function add_comments_columns ( $columns ){
$columns [ 'new_field_qq' ] = __ ( 'QQ' ); // 新增列名称
return $columns ;
}
function output_comments_qq_columns ( $column_name , $comment_id ){
switch ( $column_name ) {
case " new_field_qq " :
// 这是输出值, 可以拿来在前端输出, 这里已经在钩子manage_comments_custom_column上输出了
echo get_comment_meta ( $comment_id , 'new_field_qq' , true );
break ;
}
}
/**
* 头像调用路径
*/
2019-01-24 17:01:27 +08:00
add_filter ( 'get_avatar' , 'change_avatar' , 10 , 3 );
function change_avatar ( $avatar ){
2018-05-26 18:59:29 +08:00
global $comment ;
if ( get_comment_meta ( $comment -> comment_ID , 'new_field_qq' , true ) ){
$qq_number = get_comment_meta ( $comment -> comment_ID , 'new_field_qq' , true );
return '<img src="https://q2.qlogo.cn/headimg_dl?dst_uin=' . $qq_number . '&spec=100" data-src="' . stripslashes ( $m [ 1 ]) . '" class="lazyload avatar avatar-24 photo" alt="😀" width="24" height="24" onerror="imgError(this,1)">' ;
} else {
return $avatar ;
}
}
2019-01-26 11:25:53 +08:00
// default feature image
function DEFAULT_FEATURE_IMAGE () {
if ( empty ( akina_option ( 'default_feature_image' )) ) {
return get_template_directory_uri () . '/feature/index.php?' . rand ( 1 , 1000 );
//return 'https://api.mashiro.top/feature/?'.rand(1,1000);
} else {
return akina_option ( 'default_feature_image' ) . '?' . rand ( 1 , 1000 );
}
}
2019-08-18 01:50:21 +08:00
//防止设置置顶文章造成的图片同侧bug
add_action ( 'pre_get_posts' , function ( $q ){
if ( $q -> is_home () && $q -> is_main_query () && $q -> get ( 'paged' ) > 1 )
$q -> set ( 'post__not_in' , get_option ( 'sticky_posts' ) );
});
2019-08-18 18:23:18 +08:00
/*
* 定制实时搜索 rest api
* @ rest api接口路径: https :// sakura . 2 heng . xin / wp - json / cache_search / v1 / json /
* @ 可在cache_search_json () 函数末尾通过设置 HTTP header 控制 json 缓存时间
*/
function cache_search_json () {
$vowels = array ( " [ " , " { " , " ] " , " } " , " < " , " > " , " \r \n " , " \r " , " \n " , " - " , " ' " , '"' , '`' , " " , " : " , " ; " , '\\' , " " , " toc " );
$regex = <<< EOS
/< \ / ? [ a - zA - Z ] + ( " [^ " ] * " |'[^']*'|[^' " > ]) *>| begin [ \S\s ] * \ / begin | hermit [ \S\s ] * \ / hermit | img [ \S\s ] * \ / img | {{ .* ? }} |:.* ? :/ m
EOS ;
$posts = new WP_Query ( 'posts_per_page=-1&post_status=publish&post_type=post' );
while ( $posts -> have_posts ()) : $posts -> the_post ();
$output .= '{"type":"post","link":"' . get_post_permalink () . '","title":' . json_encode ( get_the_title ()) . ',"comments":"' . get_comments_number ( '0' , '1' , '%' ) . '","text":' . json_encode ( str_replace ( $vowels , " " , preg_replace ( $regex , ' ' , get_the_content ()))) . '},' ;
endwhile ;
wp_reset_postdata ();
$pages = get_pages ();
foreach ( $pages as $page ) {
$output .= '{"type":"page","link":"' . get_page_link ( $page ) . '","title":' . json_encode ( $page -> post_title ) . ',"comments":"' . $page -> comment_count . '","text":' . json_encode ( str_replace ( $vowels , " " , preg_replace ( $regex , ' ' , $page -> post_content ))) . '},' ;
}
$tags = get_tags ();
foreach ( $tags as $tag ) {
$output .= '{"type":"tag","link":"' . get_term_link ( $tag ) . '","title":' . json_encode ( $tag -> name ) . ',"comments":"","text":""},' ;
}
$categories = get_categories ();
foreach ( $categories as $category ) {
$output .= '{"type":"category","link":"' . get_term_link ( $category ) . '","title":' . json_encode ( $category -> name ) . ',"comments":"","text":""},' ;
}
if ( akina_option ( 'live_search_comment' )){
$comments = get_comments ();
foreach ( $comments as $comment ) {
$is_private = get_comment_meta ( $comment -> comment_ID , '_private' , true );
if ( $is_private ){
$output .= '{"type":"comment","link":"' . get_comment_link ( $comment ) . '","title":' . json_encode ( get_the_title ( $comment -> comment_post_ID )) . ',"comments":"","text":' . json_encode ( $comment -> comment_author . " :该评论为私密评论 " ) . '},' ;
continue ;
} else {
$output .= '{"type":"comment","link":"' . get_comment_link ( $comment ) . '","title":' . json_encode ( get_the_title ( $comment -> comment_post_ID )) . ',"comments":"","text":' . json_encode ( str_replace ( $vowels , " " , preg_replace ( $regex , " " , $comment -> comment_author . " : " . $comment -> comment_content ))) . '},' ;
}
}
}
$output = substr ( $output , 0 , strlen ( $output ) - 1 );
$data = '[' . $output . ']' ;
$result = new WP_REST_Response ( json_decode ( $data ), 200 );
$result -> set_headers ( array ( 'Content-Type' => 'application/json' ,
'Cache-Control' => 'max-age=3600' )); // json 缓存控制
return $result ;
}
2019-08-18 18:50:11 +08:00
if ( akina_option ( 'live_search' )){
add_action ( 'rest_api_init' , function () {
register_rest_route ( 'cache_search/v1' , '/json/' , array (
'methods' => 'GET' ,
'callback' => 'cache_search_json' ,
) );
} );
}
2019-08-18 18:23:18 +08:00
2018-05-26 18:59:29 +08:00
//code end