* @license GPL-3.0 License * @version 2023.04.04 */ // 文章链接添加 target 和 rel function content_nofollow($content) { $regexp = "]*href=['\"][^#]([^'\"]*?)\\1[^>]*>"; if (preg_match_all("/$regexp/siU", $content, $matches, PREG_SET_ORDER)) { if (!empty($matches) && !empty(get_option('siteurl'))) { $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 custom_excerpt_length($length) { return kratos_option('g_excerpt_length', '260'); } add_filter('excerpt_length', 'custom_excerpt_length'); // 开启特色图 add_theme_support("post-thumbnails"); // 生成适合特色图的比例图片 add_image_size('kratos-thumbnail', 512, 288, true); // 强制图片链接到媒体文件 add_action('after_setup_theme', 'default_attachment_display_settings'); function default_attachment_display_settings() { update_option('image_default_link_type', 'file'); } // 文章特色图片 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 { 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('jquery'), 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; } if (!function_exists('comment_callback')) : function comment_callback() { $comment = wp_handle_comment_submission(wp_unslash($_POST)); $commenter = wp_get_current_commenter(); 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; if ($commenter['comment_author_email']) { $moderation_note = __('Your comment is awaiting moderation.'); } else { $moderation_note = __('Your comment is awaiting moderation. This is a preview; your comment will be visible after it has been approved.'); } ?>
  • comment_approved) : ?>
    '; edit_comment_link(__('编辑', 'kratos')); echo ''; }; ?>
  • comment_approved) : ?>
    '; 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 = null) { 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 ''; } if (kratos_option('g_image_filter', true)) { add_action('admin_footer-post-new.php', 'fanly_mediapanel_lock_uploaded'); add_action('admin_footer-post.php', 'fanly_mediapanel_lock_uploaded'); function fanly_mediapanel_lock_uploaded() { 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() { if (kratos_option('g_carousel', false)) { $slide = 0; $item = 0; $output = '
    '; } 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]}"; }