* @license MIT License * @version 2021.06.25 */ // 文章链接添加 target 和 rel function content_nofollow($content) { $regexp = "]*href=['\"][^#]([^'\"]*?)\\1[^>]*>"; if (preg_match_all("/$regexp/siU", $content, $matches, PREG_SET_ORDER)) { if (!empty($matches)) { $srcUrl = get_option('siteurl'); for ($i = 0; $i < count($matches); $i++) { $tag = $matches[$i][0]; $tag2 = $matches[$i][0]; $url = $matches[$i][0]; $noFollow = ''; $pattern = '/target\s*=\s*"\s*_blank\s*"/'; preg_match($pattern, $tag2, $match, PREG_OFFSET_CAPTURE); if (count($match) < 1) { $noFollow .= ' target="_blank" '; } $pattern = '/rel\s*=\s*"\s*[n|d]ofollow\s*"/'; preg_match($pattern, $tag2, $match, PREG_OFFSET_CAPTURE); if (count($match) < 1) { $noFollow .= ' rel="nofollow" '; } $pos = strpos($url, $srcUrl); if ($pos === false) { $tag = rtrim($tag, '>'); $tag .= $noFollow . '>'; $content = str_replace($tag2, $tag, $content); } } } } $content = str_replace(']]>', ']]>', $content); return $content; } add_filter('the_content', 'content_nofollow'); // 文章点赞 function love() { global $wpdb, $post; $id = $_POST["um_id"]; $action = $_POST["um_action"]; if ($action == 'love') { $raters = get_post_meta($id, 'love', true); $expire = time() + 99999999; $domain = ($_SERVER['HTTP_HOST'] != 'localhost') ? $_SERVER['HTTP_HOST'] : false; setcookie('love_' . $id, $id, $expire, '/', $domain, false); if (!$raters || !is_numeric($raters)) { update_post_meta($id, 'love', 1); } else { update_post_meta($id, 'love', ($raters + 1)); } echo get_post_meta($id, 'love', true); } die; } add_action('wp_ajax_nopriv_love', 'love'); add_action('wp_ajax_love', 'love'); // 文章阅读次数统计 function set_post_views() { if (is_singular()) { global $post; $post_ID = $post->ID; if ($post_ID) { $post_views = (int) get_post_meta($post_ID, 'views', true); if (!update_post_meta($post_ID, 'views', ($post_views + 1))) { add_post_meta($post_ID, 'views', 1, true); } } } } add_action('wp_head', 'set_post_views'); function get_post_views($echo = 1) { global $post; $post_ID = $post->ID; $views = (int) get_post_meta($post_ID, 'views', true); return $views; } // 文章列表简介内容 function excerpt_length($length) { return 260; } add_filter('excerpt_length', 'excerpt_length'); // 开启特色图 add_theme_support("post-thumbnails"); // 生成适合特色图的比例图片 add_image_size( 'kratos-thumbnail', 512, 288, true ); // 文章特色图片 function post_thumbnail() { global $post; $img_id = get_post_thumbnail_id(); $img_url = wp_get_attachment_image_src($img_id, 'kratos-thumbnail'); if (is_array($img_url)) { $img_url = $img_url[0]; } if (has_post_thumbnail()) { echo ''; } else { $content = $post->post_content; $img_preg = "//"; preg_match($img_preg, $content, $img_src); $img_count = count($img_src) - 1; if (isset($img_src[$img_count])) { $img_val = $img_src[$img_count]; } if (!empty($img_val)) { echo ''; } else { $category=get_the_category($post->ID); $catid=$category[0]->term_id; if(kratos_option('essay_feature_img_'.$catid) && kratos_option('essay_feature_img_usable',true)) { $img = kratos_option('essay_feature_img_'.$catid); }elseif(!kratos_option('g_postthumbnail')) { $img = ASSET_PATH . '/assets/img/default.jpg'; } else { $img = kratos_option('g_postthumbnail', ASSET_PATH . '/assets/img/default.jpg'); } echo ''; } } } // 文章列表分页 function pagelist($range = 5) { global $paged, $wp_query, $max_page; if (!$max_page) {$max_page = $wp_query->max_num_pages;} if ($max_page > 1) {if (!$paged) {$paged = 1;} echo "
"; if ($paged > 1) { echo ''; } if ($max_page > $range) { if ($paged < $range) { for ($i = 1; $i <= $range; $i++) { if ($i == $paged) { echo '' . $i . ''; } else { echo "$i"; } } echo ''; echo "$max_page"; } elseif ($paged >= ($max_page - ceil(($range / 2)))) { if ($paged != 1) { echo "1"; echo ''; } for ($i = $max_page - $range + 1; $i <= $max_page; $i++) { if ($i == $paged) { echo '' . $i . ''; } else { echo "$i"; } } } elseif ($paged >= $range && $paged < ($max_page - ceil(($range / 2)))) { if ($paged != 1) { echo "1"; echo ''; } for ($i = ($paged - ceil($range / 3)); $i <= ($paged + ceil(($range / 3))); $i++) { if ($i == $paged) { echo '' . $i . ''; } else { echo "$i"; } } echo ''; echo "$max_page"; } } else { for ($i = 1; $i <= $max_page; $i++) { if ($i == $paged) { echo '' . $i . ''; } else { echo "$i"; } } } if ($paged < $max_page) { echo ''; } echo "
"; } } // 文章评论 function comment_scripts() { wp_enqueue_script('comment', ASSET_PATH . '/assets/js/comments.min.js', array(), THEME_VERSION); wp_localize_script('comment', 'ajaxcomment', array( 'ajax_url' => admin_url('admin-ajax.php'), 'order' => get_option('comment_order'), 'compost' => __('评论正在提交中','kratos'), 'comsucc' => __('评论提交成功','kratos'), )); } add_action('wp_enqueue_scripts', 'comment_scripts'); function comment_err($a) { header('HTTP/1.0 500 Internal Server Error'); header('Content-Type: text/plain;charset=UTF-8'); echo $a; exit; } function comment_callback() { $comment = wp_handle_comment_submission(wp_unslash($_POST)); if (is_wp_error($comment)) { $data = $comment->get_error_data(); if (!empty($data)) { comment_err($comment->get_error_message()); } else { exit; } } $user = wp_get_current_user(); do_action('set_comment_cookies', $comment, $user); $GLOBALS['comment'] = $comment; ?>
  • ';edit_comment_link(__('编辑', 'kratos'));echo '';};?>
  • ';edit_comment_link(__('编辑', 'kratos'));echo '';};?>
    'comment', 'respond_id' => 'respond', 'reply_text' => '' . __('回复', 'kratos') . ''); comment_reply_link(array_merge($defaults, array('depth' => $depth, 'max_depth' => $args['max_depth']))); ?>
    'mrgreen.png', ':exclaim:' => 'exclaim.png', ':neutral:' => 'neutral.png', ':twisted:' => 'twisted.png', ':arrow:' => 'arrow.png', ':eek:' => 'eek.png', ':smile:' => 'smile.png', ':confused:' => 'confused.png', ':cool:' => 'cool.png', ':evil:' => 'evil.png', ':biggrin:' => 'biggrin.png', ':idea:' => 'idea.png', ':redface:' => 'redface.png', ':razz:' => 'razz.png', ':rolleyes:' => 'rolleyes.png', ':wink:' => 'wink.png', ':cry:' => 'cry.png', ':lol:' => 'lol.png', ':mad:' => 'mad.png', ':drooling:' => 'drooling.png', ':persevering:' => 'persevering.png', ); } smilies_reset(); function smilies_custom_button() { printf('' . __('添加表情', 'kratos') . '
    ' . get_wpsmiliestrans() . '
    '); } add_action('media_buttons', 'smilies_custom_button'); function get_wpsmiliestrans() { global $wpsmiliestrans; global $output; $wpsmilies = array_unique($wpsmiliestrans); foreach ($wpsmilies as $alt => $src_path) { $output .= ''; } return $output; } if (!kratos_option('g_gutenberg',false)) { // 禁用 Gutenberg 编辑器 add_filter('use_block_editor_for_post', '__return_false'); add_filter('gutenberg_use_widgets_block_editor', '__return_false'); add_filter('use_widgets_block_editor', '__return_false'); remove_action('wp_enqueue_scripts', 'wp_common_block_scripts_and_styles'); // 删除前端的block library的css资源, add_action('wp_enqueue_scripts', 'remove_block_library_css', 100); function remove_block_library_css() { wp_dequeue_style('wp-block-library'); } // 禁用 Auto Embeds remove_filter('the_content', array($GLOBALS['wp_embed'], 'autoembed'), 8); } // 文章评论增强 function comment_add_at($comment_text, $comment = '') { if( $comment->comment_parent > 0) { $comment_text = '@' . get_comment_author( $comment->comment_parent ) . ' ' . $comment_text; } return $comment_text; } add_filter('comment_text' , 'comment_add_at', 20, 2); function recover_comment_fields($comment_fields){ $comment = array_shift($comment_fields); $comment_fields = array_merge($comment_fields ,array('comment' => $comment)); return $comment_fields; } add_filter('comment_form_fields','recover_comment_fields'); $new_meta_boxes = array( "description" => array( "name" => "seo_description", "std" => "", "title" => __( '描述', 'kratos' ) ), "keywords" => array( "name" => "seo_keywords", "std" => "", "title" => __( '关键词', 'kratos' ) ) ); function seo_meta_boxes() { $post_types = get_post_types(); add_meta_box( 'meta-box-id', __( 'SEO 设置', 'kratos' ), 'post_seo_callback', $post_types ); } add_action( 'add_meta_boxes', 'seo_meta_boxes' ); function post_seo_callback( $post ) { global $new_meta_boxes; foreach($new_meta_boxes as $meta_box) { $meta_box_value = get_post_meta($post->ID, $meta_box['name'].'_value', true); if($meta_box_value == "") $meta_box_value = $meta_box['std']; echo '

    '.$meta_box['title'].'

    '; echo '
    '; } echo ''; } function wpdocs_save_meta_box( $post_id ) { global $new_meta_boxes; if ( !wp_verify_nonce( isset($_POST['metaboxes_nonce']) ? $_POST['metaboxes_nonce'] : null , plugin_basename(__FILE__) )) return; if ( !current_user_can( 'edit_posts', $post_id )) return; foreach($new_meta_boxes as $meta_box) { $data = $_POST[$meta_box['name'].'_value']; if($data == "") delete_post_meta($post_id, $meta_box['name'].'_value', get_post_meta($post_id, $meta_box['name'].'_value', true)); else update_post_meta($post_id, $meta_box['name'].'_value', $data); } } add_action( 'save_post', 'wpdocs_save_meta_box' ); // 主页轮播 function kratos_carousel(){ $output = ''; $carousel_img= null; $carousel_url= null; if(kratos_option('g_carousel', false)){ for($i=1; $i<6; $i++){ $carousel_img_[$i] = kratos_option("c_i_{$i}") ?: null; $carousel_url_[$i] = kratos_option("c_u_{$i}") ?: null; if($carousel_img_[$i] ){ $carousel_img[] = $carousel_img_[$i]; $carousel_url[] = $carousel_url_[$i]; } } if(is_array($carousel_img)){ $count = count($carousel_img); } else { $count = '0'; } $output = '
    "; }; $output .= ''; $output .= ''; } if(is_array($carousel_img)){ echo $output; } } // 获取文章评论数量 function findSinglecomments($postid=0,$which=0){ $comments = get_comments('status=approve&type=comment&post_id='.$postid); if ($comments) { $i=0; $j=0; $commentusers=array(); foreach ($comments as $comment) { ++$i; if ($i==1) { $commentusers[] = $comment->comment_author_email; ++$j; } if ( !in_array($comment->comment_author_email, $commentusers) ) { $commentusers[] = $comment->comment_author_email; ++$j; } } $output = array($j,$i); $which = ($which == 0) ? 0 : 1; return $output[$which]; } return 0; } // 文章目录功能 function toc_content($content) { if (is_singular()) { global $toc_count; global $toc; $toc = array(); $toc_count = 0; $toc_depth = 3; $regex = '#(.*?)#'; $content = preg_replace_callback($regex, 'toc_replace_heading', $content); } return $content; } add_filter('the_content', 'toc_content'); function toc_replace_heading($content) { global $toc_count; global $toc; $toc_count++; $toc[] = array('text' => trim(strip_tags($content[3])), 'depth' => $content[1], 'count' => $toc_count); return "{$content[3]}"; } function article_toc() { global $toc; $index = wp_cache_get(get_the_ID(), 'toc'); if ($index === false && $toc) { $index = '
      ' . "\n"; $prev_depth = ''; $to_depth = 0; foreach ($toc as $toc_item) { $toc_depth = $toc_item['depth']; if ($prev_depth) { if ($toc_depth == $prev_depth) { $index .= '' . "\n"; } elseif ($toc_depth > $prev_depth) { $to_depth++; $index .= '
        ' . "\n"; } else { $to_depth2 = $to_depth > $prev_depth - $toc_depth ? $prev_depth - $toc_depth : $to_depth; if ($to_depth2) { for ($i = 0; $i < $to_depth2; $i++) { $index .= '' . "\n" . '
      ' . "\n"; $to_depth--; } } $index .= ''; } } $index .= '
    • ' . str_replace(array('[h2title]', '[/h2title]'),array('', ''),$toc_item['text']) . ''; $prev_depth = $toc_item['depth']; } for ($i = 0; $i <= $to_depth; $i++) { $index .= '
    • ' . "\n" . '
    ' . "\n"; } wp_cache_set(get_the_ID(), $index, 'toc', 360000); $index = '
    ' . "\n" . '
    文章目录
    ' . "\n" . '
    ' . $index . '
    ' . "\n" . '
    '; } return $index; }