WordPress博客如何少用插件

 跨境狗   2020-03-15 20:43     0 条评论
payoneer register

月初的时候折腾了一下服务器的迁移,在备份网站的时候发现这个备份文件比较大,在下载或者上传的时候也挺费时间,一开始没想这么多,想把网站迁移完了再说。

知道最近几天使用SEMrush综合SEO工具检测了一下,发现里面有些问题,提示使用的一些css, js之类的可能影响网站速度,可以发现使用了一些是插件下面的东西,如果不影响速度,也可以不用管就行了。

wordpress plugins

wordpress plugins

但是总是看着有问题得想着解决,于是又折腾了一下,当然,下面的所有布局最好是在建站前期全部部署好,会省很多事情,不用去做301跳转之类的,也不用担心以后文章被收入又降权的问题。

能不使用插件的尽量不要使用插件,免得消耗资源。

下面来看一下几种常见的可以使用代码替换插件的方法,减少对服务器的消耗。

第一,安装SSL证书后实现HTTPS进行全站跳转

简单的方法,当然可以使用插件来实现,而且设置也是很简单,不用折腾代码,这是最便捷的实现方法,插件可以使用really simple ssl,有需要的可以在你博客后台插件-->安装新插件,搜索really simple ssl即可,安装插件设置也是非常简单如下图:

really simple ssl setting

如何使用代码实现跳转呢?下面来看一下用什么代码实现,加到什么位置,当然使用宝塔面板可以在安装SSL证书的右上角直接强制HTTPS即可,下面我们来看一下代码:

server {
listen 80;
server_name xxxx.com ; #将xxxx修改为您证书绑定的域名,例如:www.xxxx.com。
rewrite ^(.*)$ https://$host$1 permanent; #将所有http请求通过rewrite重定向到https。
location / {
index index.html index.htm;
}
}

将代码加到nginx.conf文件中,当然,如果你是使用Apache的话设置如下;

修改httpd.conf文件,设置HTTP请求自动跳转HTTPS。
在httpd.conf文件中的<VirtualHost *:80> </VirtualHost>中间,添加以下重定向代码。

RewriteEngine on
RewriteCond %{SERVER_PORT} !^443$
RewriteRule ^(.*)$ https://%{SERVER_NAME}$1 [L,R]

参考文档:在Apache服务器上安装SSL证书

第二,伪静态设置固定链接路径改变后如何实现旧链接301跳转到新链接,使老链接权重传递到新链接。

这个是在没有经验的新手博主常见的问题,比如我自己当初的时候就是吃过这样的亏,直接买了服务器安装上就开始发内容,没有做前期的设置,当改变了伪静态的固定链接的结构后,访问老链接就变成空的。

使用插件WP Permalinks Migration也是非常简单实现,设置也是非常简单,将旧伪静态固定链接结构填入输入框中即可,可以到插件提供页面查看详情,如下图所示:

固定链接迁移

使用代码如何实现伪静态固定旧链接跳转到新链接呢?

将以下代码加入到主题文件夹下面的functions.php文件中,将代码加到<?php .....?>之间,一般直接加到最后面就可以了。如果已经被搜索引擎收录了好多,以前的地址都无法访问了,所以要做好301重定向,跳转到新的固定链接所生成的地址中去,要不然都是404就悲剧了。下面代码可以解决

$rewrite_config = array();
$rewrite_config['highpriority'] = true ;
$rewrite_config['rewrite'] = array();
$rewrite_config['oldstructure'] = "/%category%/%post_id%.html";

function wpdaxue_pm_the_posts($post) {
global $wp;
global $wp_rewrite;
global $rewrite_config;

$rewrite_config['rewrite'] = $wp_rewrite->generate_rewrite_rule($rewrite_config['oldstructure'], false, true, true, true);
if ($post != NULL && is_single() && $rewrite_config['oldstructure'] != $wp_rewrite->permalink_structure) {
if (array_key_exists($wp->matched_rule, $rewrite_config['rewrite'])) {
// ok, we need to generate a 301 Permanent redirect here.
header("HTTP/1.1 301 Moved Permanently", TRUE, 301);
header('Status: 301 Moved Permanently');
$permalink = get_permalink($post[0]->ID);
if (is_feed()) {
$permalink = trailingslashit($permalink) . 'feed/';
}
header("Location: ". $permalink);
exit();
}
}
return $post;
}

function wpdaxue_pm_post_rewrite_rules($rules) {
global $wp_rewrite;
global $rewrite_config;
$oldstruct = $rewrite_config['oldstructure'];

if ($oldstruct != NULL && $oldstruct != $wp_rewrite->permalink_structure) {
$rewrite_config['rewrite'] = $wp_rewrite->generate_rewrite_rule($oldstruct, false, true, true, true);
if ($rewrite_config ['highpriority'] == true) {
return array_merge($rewrite_config['rewrite'], $rules);
} else {
return array_merge($rules, $rewrite_config['rewrite']);
}
}
return $rules;
}
add_filter('the_posts', 'wpdaxue_pm_the_posts', 20);
add_filter('post_rewrite_rules', 'wpdaxue_pm_post_rewrite_rules');

将我的$rewrite_config['oldstructure'] = “/%category%/%post_id%.html”中的/%category%/%post_id%.html修改成你自己的旧的固定链接格式,然后将这段代码加入到主题的functions.php中,然后设置成新的固定链接格式就可以了.

当然还有其他的方法,比如,服务器是ngnix环境的话,加这段代码到ngnix.conf里面。

rewrite ^/(.+)/(d+).html$ /$2.html permanent

301重定向代码一定要放在wordpress伪静态规则之前,否则不生效!给一下完整的句子顺序如下:

server
{
listen 80;
server_name kjgou.net;
index index.html index.htm index.php default.html default.htm default.php;
root /home/nuodou;

rewrite ^/(.+)/(d+).html$ /$2.html permanent;#修改固定链接后,做301重定向
#wordpress伪静态
if (!-e $request_filename){
rewrite ^(.+)$ /index.php?q=$1 last;}

include none.conf;

……此处略去N个字符……

}

解释一下上面的意思,我原来的固定链接结构是/%category%/%post_id%.html,新的固定结构是/%post_id%.html,其中,%post_id%肯定是数字,正则表达式中(d+)对应任意数字,所以以前的网址可以写成/(d+),而%category%是分类,肯定是字符,不管是汉字还是字母,正则表达式中(.+) 对应的是任意字符(包括汉字、英文字母等),所以旧的网址可以写成/(.+)/(d+).html,因为%post_id%是旧网址的第二个变量,所以整句就是rewrite ^/(.+)/(d+).html$ /$2.html permanent,permanent是实现301跳转的意思。

  • ^ –> 匹配字符串的开始
  • $ –> 匹配字符串的结束

(d+)后面的$是结束前面格式,执行后面格式。

下面这种方法需要根据自己的情况进行修改变量,需要花一定的时间进行理解,不一定能把自己的格式写对,所以还以用第一种方便,直接更换一下以前的链接就可以了。

第三,如何实现外链实现自动nofollow属性,及新窗口打开?

做过网站的人都知道,如果外链不加nofollow属性的话,会将权重传递到外链链接,为了减少权重传递流失,很多懂的人都会对外链加nofollow属性,从而搜索引擎蜘蛛在爬行的时候不再对外链链接抓取,保证本站的权重。

我们可以安装插件来实现,在进行外链设置的时候将nofollow选项打勾,这样的话可以实现外链的nofollow属性,但是每个链接得手动设置,有点花时间麻烦。

但是我们也可以使用代码来实现外链nofollow属性及新窗口打开链接,从而工作一劳永逸,不用每次每个链接都要手动加上去,将如下代码加到functions.php文件中.

// 文章页面外链自动添加nofollow属性和新窗口打开
add_filter( 'the_content', 'cn_nf_url_parse');
function cn_nf_url_parse( $content ) {
$regexp = "<a\s[^>]*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', 'auto_nofollow'); //nofollow文章中的站外链接
add_filter('comment_text', 'auto_nofollow'); //nofollow评论中的站外链接
function auto_nofollow($content) {
//return stripslashes(wp_rel_nofollow($content));
return preg_replace_callback('/<a>]+/', 'auto_nofollow_callback', $content);
}
function auto_nofollow_callback($matches) {
$link = $matches[0];
$site_link = get_bloginfo('url');
if (strpos($link, 'rel') === false) {
$link = preg_replace("%(href=S(?!$site_link))%i", 'rel="nofollow" $1', $link);
} elseif (preg_match("%href=S(?!$site_link)%i", $link)) {
$link = preg_replace('/rel=S(?!nofollow)S*/i', 'rel="nofollow"', $link);
}
return $link;
}

这里有两种代码,我用的是前一种,你也可以尝试使用后面那种代码,先测试一下是否可以,如果可以的话,使用哪种都可以,只要能实现就可以了,很多博主跟我一样不是专业IT人员,不知道代码里面具体的意思。

第四,如何将文章链接默认的category去掉?

如果我们不做任何设置的话,我们发布的每一篇文章都会带有category,即:https://kjgou.net/category/123.html,从而增加了链接的深度,从而对搜索引擎的蜘蛛爬行增加了难度,对SEO就不太友好。

 

为了去除这个category,我也是找遍各种方法,最简单粗暴的就是安装插件,可以使用插件No Category Base (WPML),轻松将category去掉。

 

下面我们来看一下如何使用代码,将以下代码加到functions.php中,从而实现去除category的目的。

//去除分类标志代码
add_action( 'load-themes.php', 'no_category_base_refresh_rules');
add_action('created_category', 'no_category_base_refresh_rules');
add_action('edited_category', 'no_category_base_refresh_rules');
add_action('delete_category', 'no_category_base_refresh_rules');
function no_category_base_refresh_rules() {
global $wp_rewrite;
$wp_rewrite -> flush_rules();
}
// register_deactivation_hook(__FILE__, 'no_category_base_deactivate');
// function no_category_base_deactivate() {
// remove_filter('category_rewrite_rules', 'no_category_base_rewrite_rules');
// // We don't want to insert our custom rules again
// no_category_base_refresh_rules();
// }
// Remove category base
add_action('init', 'no_category_base_permastruct');
function no_category_base_permastruct() {
global $wp_rewrite, $wp_version;
if (version_compare($wp_version, '3.4', '<')) {
// For pre-3.4 support
$wp_rewrite -> extra_permastructs['category'][0] = '%category%';
} else {
$wp_rewrite -> extra_permastructs['category']['struct'] = '%category%';
}
}
// Add our custom category rewrite rules
add_filter('category_rewrite_rules', 'no_category_base_rewrite_rules');
function no_category_base_rewrite_rules($category_rewrite) {
//var_dump($category_rewrite); // For Debugging
$category_rewrite = array();
$categories = get_categories(array('hide_empty' => false));
foreach ($categories as $category) {
$category_nicename = $category -> slug;
if ($category -> parent == $category -> cat_ID)// recursive recursion
$category -> parent = 0;
elseif ($category -> parent != 0)
$category_nicename = get_category_parents($category -> parent, false, '/', true) . $category_nicename;
$category_rewrite['(' . $category_nicename . ')/(?:feed/)?(feed|rdf|rss|rss2|atom)/?$'] = 'index.php?category_name=$matches[1]&feed=$matches[2]';
$category_rewrite['(' . $category_nicename . ')/page/?([0-9]{1,})/?$'] = 'index.php?category_name=$matches[1]&paged=$matches[2]';
$category_rewrite['(' . $category_nicename . ')/?$'] = 'index.php?category_name=$matches[1]';
}
// Redirect support from Old Category Base
global $wp_rewrite;
$old_category_base = get_option('category_base') ? get_option('category_base') : 'category';
$old_category_base = trim($old_category_base, '/');
$category_rewrite[$old_category_base . '/(.*)$'] = 'index.php?category_redirect=$matches[1]';
//var_dump($category_rewrite); // For Debugging
return $category_rewrite;
}
// Add 'category_redirect' query variable
add_filter('query_vars', 'no_category_base_query_vars');
function no_category_base_query_vars($public_query_vars) {
$public_query_vars[] = 'category_redirect';
return $public_query_vars;
}
// Redirect if 'category_redirect' is set
add_filter('request', 'no_category_base_request');
function no_category_base_request($query_vars) {
//print_r($query_vars); // For Debugging
if (isset($query_vars['category_redirect'])) {
$catlink = trailingslashit(get_option('home')) . user_trailingslashit($query_vars['category_redirect'], 'category');
status_header(301);
header("Location: $catlink");
exit();
}
return $query_vars;
}

提醒: 使用代码之后,网站可能会出现 404 页面,也即%post_id%.html(本站的固定链接)的伪静态失效了,解决办法很简单,登录后台>>设置>>固定链接设置页面,把固定链接格式改成别的,然后再改回自己常用的格式,保存一下就可以解决这个 bug,不行就多改几次。如果还不行就把所有缓存清除后再尝试。

目前我所遇到的就这几个可以使用代码代替插件来实现的方法,当然,如果你的IT技术人员的话,基本大部分的都是可以代码来操作了,从而减少不必要资源消耗,影响网站速度。

以上代码均来自网络,大家使用的时候先测试一下,稳妥了再替换插件。

如果你有什么好的其他方便用代码实现的功能,可以留言交流,共同进步。

还有最好,使用一些检测工具检测一下网站的问题,然后做优化,能优化的地方尽量优化好,我使用的是SEMrush工具,现在注册使用有45美金的折扣,需要的话可以点击注册SEMrush使用,当然你可以使用能检测的工具就可以了。

本文地址:https://kjgou.net/1608.html
版权声明:本文为原创文章,版权归 跨境狗 所有,欢迎分享本文,转载请保留出处!
英文改写工具spinrewriter

 发表评论


表情