一、问题情况
因为刚用wordpress搭建网站,遇到很多问题,故记录一下以免以后升级出现一些反复不知道修改哪里。
二、解决办法
2.1 登录地址保护
因为wordpress开源所以后台地址固定,可以前台增加一下url验证参数,functions.php里添加
1 2 3 4 |
//登录地址保护 function login_protection(){ if($_GET['this'] != 'ok')header('Location: https://www.1987619.com/'); } |
后台的登录地址就变成了(参数前后数值可以改,和上面对应就行,如果输入不带参的登录地址,打开直接跳转首页)
1 |
https://www.1987619.com/wp-login.php?cool=shark?this=ok |
2.2 保护后台地址
nginx里直接添加后台/wp-admin/路径的locaiton访问401
1 2 3 4 5 6 |
location ^~ /wp-admin/ { auth_basic "hello world!"; auth_basic_user_file /usr/local/nginx/conf/401passwd; include enable-php.conf; } |
然后重启nginx后打开后台路径直接跳出401登录框,可以防止一些后台漏洞.(关于401文件生成请看站内nginx401文章)
2.3 文章摘要输出长度
因为wordpress的the_excerpt()默认输出55英文单词长度,因为是中文所以自动切割了很少的字符,functions.php里添加
1 2 3 4 5 |
//自定义摘要长度 function custom_excerpt_length( $length ){ return 160; } add_filter( 'excerpt_length', 'custom_excerpt_length'); |
return字节就是返回长度.可以自行调节.
2.4 标题文章评论里的–等转义字符问题
wordpress的title里标题和副标题是用–间隔开的,html转义后是-,源码里不好看所以改回来,functions.php里添加
1 2 |
//取消转义 add_filter( 'run_wptexturize', '__return_false' ); |
2.5 header里删除无用的dns-prefetch
wordpress的header里会自带dns预解析,无用关闭掉
1 2 |
<link rel='dns-prefetch' href='http://ajax.googleapis.com'> <link rel='dns-prefetch' href='http://fonts.googleapis.com'> |
functions.php里添加
1 2 |
//关闭dns-prefetch remove_action( 'wp_head', 'wp_resource_hints', 2 ); |
2.6 关闭调用s.w.org的emoji图标
wordpress为了兼容老的浏览器能显示emoji图标,用了s.w.org的图标,国内可能访问不了,关闭掉.functions.php里添加
1 2 3 4 5 6 7 8 9 10 |
//关闭emoji remove_action('admin_print_scripts', 'print_emoji_detection_script'); remove_action('admin_print_styles', 'print_emoji_styles'); remove_action('wp_head', 'print_emoji_detection_script', 7); remove_action('wp_print_styles', 'print_emoji_styles'); remove_action('embed_head', 'print_emoji_detection_script'); 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( 'emoji_svg_url', '__return_false' ); |
2.7 关闭调用Feed
因为不使用feed功能,所以关闭掉,functions.php里添加
1 2 3 4 5 6 7 8 9 10 11 |
//关闭feed function disable_all_feeds() { wp_die(__('<h1>本博客不提供Feed,请访问网站<a href="'.get_bloginfo('url').'">首页</a>!</h1>')); } add_action('do_feed', 'disable_all_feeds', 1); add_action('do_feed_rdf', 'disable_all_feeds', 1); add_action('do_feed_rss', 'disable_all_feeds', 1); add_action('do_feed_rss2', 'disable_all_feeds', 1); add_action('do_feed_atom', 'disable_all_feeds', 1); remove_action( 'wp_head', 'feed_links_extra', 3 ); remove_action( 'wp_head', 'feed_links', 2 ); |
2.8 默认字体问题
因为默认为宋体,字体不好看,所以改成雅黑,但是雅黑的英文也不好看所以到自定义的额外css里添加字体样式(字体是优先从左到右匹配,可以先写只有英文的字体,再写带中文的字体,就可以英文中文使用不同字体了,class指定了非小图标的样式,防止图标显示异常)
1 2 3 |
*:not([class*="icon"]):not(i){ font-family:'MonacoRegular','Microsoft Yahei'!important; } |
2.9 关闭REST API
functions.php里添加
1 2 3 4 5 |
//屏蔽 REST API add_filter('json_enabled', '__return_false' ); add_filter('json_jsonp_enabled', '__return_false' ); add_filter('rest_enabled', '__return_false'); add_filter('rest_jsonp_enabled', '__return_false'); |
2.10 移除头部 wp-json 标签和 HTTP header 中的 link
functions.php里添加
1 2 3 |
//移除头部 wp-json 标签和 HTTP header 中的 link remove_action('wp_head', 'rest_output_link_wp_head', 10 ); remove_action('template_redirect', 'rest_output_link_header', 11 ); |
2.11 移除头部wp版本号
functions.php里添加
1 2 |
//移除头部wp版本号 remove_action( 'wp_head', 'wp_generator' ); |
2.12 移除头部离线编辑器接口
functions.php里添加
1 2 3 |
//移除头部离线编辑器接口 remove_action( 'wp_head', 'rsd_link' ); remove_action( 'wp_head', 'wlwmanifest_link' ); |
2.13 移除前后文、第一篇文章、主页meta信息
functions.php里添加
1 2 3 4 5 |
//移除前后文、第一篇文章、主页meta信息 remove_action( 'wp_head', 'index_rel_link' ); remove_action( 'wp_head', 'parent_post_rel_link', 10, 0 ); remove_action( 'wp_head', 'start_post_rel_link', 10, 0 ); remove_action( 'wp_head', 'adjacent_posts_rel_link_wp_head', 10, 0 ); |
2.14 关闭embeds
functions.php里添加
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 |
//关闭embeds function disable_embeds_init() { /* @var WP $wp */ global $wp; // Remove the embed query var. $wp->public_query_vars = array_diff( $wp->public_query_vars, array( 'embed', ) ); // Remove the REST API endpoint. remove_action( 'rest_api_init', 'wp_oembed_register_route' ); // Turn off add_filter( 'embed_oembed_discover', '__return_false' ); // Don't filter oEmbed results. remove_filter( 'oembed_dataparse', 'wp_filter_oembed_result', 10 ); // Remove oEmbed discovery links. remove_action( 'wp_head', 'wp_oembed_add_discovery_links' ); // Remove oEmbed-specific JavaScript from the front-end and back-end. remove_action( 'wp_head', 'wp_oembed_add_host_js' ); add_filter( 'tiny_mce_plugins', 'disable_embeds_tiny_mce_plugin' ); // Remove all embeds rewrite rules. add_filter( 'rewrite_rules_array', 'disable_embeds_rewrites' ); } add_action( 'init', 'disable_embeds_init', 9999 ); /** * Removes the 'wpembed' TinyMCE plugin. * * @since 1.0.0 * * @param array $plugins List of TinyMCE plugins. * @return array The modified list. */ function disable_embeds_tiny_mce_plugin( $plugins ) { return array_diff( $plugins, array( 'wpembed' ) ); } /** * Remove all rewrite rules related to embeds. * * @since 1.2.0 * * @param array $rules WordPress rewrite rules. * @return array Rewrite rules without embeds rules. */ function disable_embeds_rewrites( $rules ) { foreach ( $rules as $rule => $rewrite ) { if ( false !== strpos( $rewrite, 'embed=true' ) ) { unset( $rules[ $rule ] ); } } return $rules; } /** * Remove embeds rewrite rules on plugin activation. * * @since 1.2.0 */ function disable_embeds_remove_rewrite_rules() { add_filter( 'rewrite_rules_array', 'disable_embeds_rewrites' ); flush_rewrite_rules(); } register_activation_hook( __FILE__, 'disable_embeds_remove_rewrite_rules' ); /** * Flush rewrite rules on plugin deactivation. * * @since 1.2.0 */ function disable_embeds_flush_rewrite_rules() { remove_filter( 'rewrite_rules_array', 'disable_embeds_rewrites' ); flush_rewrite_rules(); } register_deactivation_hook( __FILE__, 'disable_embeds_flush_rewrite_rules' ); |
2.15 关闭短链接
functions.php里添加
1 2 3 |
//关闭短链接 remove_action('wp_head','wp_shortlink_wp_head',10,0); remove_action('template_redirect','wp_shortlink_header',11,0); |
2.16 关闭google字体
因为用的是自定义主题,网上写的关闭字体方法测试了无效,自己找了下在模板KnowX: Component.php (inc/Styles/Component.php)不同的主题可能要自己搜索一下哪个函数调用的
1 2 |
函数get_google_fonts_url()最后的return返回空 return ''; |