分类:代码

纯代码实现邮箱验证登录WP后台

前言

今天和@主题笔记在群里聊天,他新折腾了一个玩意儿,这玩意儿大发也弄过,就是通过邮件发送后台登录cookies来实现登录,有效保护后台安全,防止被爆破。不过@主题笔记折腾的和大发不同的是,大发是直接发送随机密码来实现登录也就是动态密码。而@主题笔记是直接发送一个登录链接来实现登录。

正文

@主题笔记一共发给了我两个文件分别是mail-login.php和mail-login-support.php文件,前者的作用是页面的实现,后者的作用则是功能的实现。

使用方案也分两种,一种是在传统的后台登录页面右下方加个按钮。如下图

这种方案的优点是,可以结合起来,适合多用户的站点。满足不同人的需求。然而对于单用户站点来说完全没有必要。

第二种方案则是,访问wp-admin直接强制跳转到邮件验证身份登录页面去,如下图。

此方案优点更加适合单用户博客,所以叶子也用了这个方案。而且由于@主题笔记并没有在此页面做返回首页的按钮,相对用户体验来说可能不佳,所以叶子自己给添加了一个返回首页的按钮。还有就是本来不会显示标题,我已经做了处理,不过是通过wp_head实现的,所以如果你的主题标题不是通过wp_head实现的话,可能需要修改下代码。

使用方法即是输入你账号所绑定的邮箱即可,前提你得确保你的博客能正常发送邮箱,否则你就自己一边哭去吧。如果无此邮箱会弹出拒绝访问的页面提示。

输入过后,你会收到如下图样式的邮件,然后点击链接,即可成功登陆。

实现方法:

下载压缩包到桌面,然后解压,得到mail-login.php和mail-login-support.php两个文件,前一个文件放到主题目录中去。后一个文件可以用代码编辑器打开,复制里面的内容粘贴到functions.php中去,也可在functions.php中写个引用代码。默认是强制跳转的,如果不想强制跳转的话,改一下mail-login-support.php文件里的内容就可以了。具体自己打开看。一目了然。

结语

我觉得这玩意儿还是不错的。毕竟牧风的那个二维码扫描的,我没有苹果电脑无法使用xcode进行编译,而且我手机用的也是安卓机,而牧风又没做安卓版的,实在可惜。只好拿这个提升下B格吧。而且有些时候需要让别人进后台帮忙测试东西,但是又不想告诉他密码,这玩意儿就很方便。直接复制我上面邮箱里收到的链接发给别人即可。

如何使用七牛云对WordPress进行加速

前言

前几天@Tokin推送了DesNote-Pro 1.09版本,我立即下载进行安装,当我们启用新版主题后,发现gravatar头像和图片都不能显示且都是外链到某个图片地址。所以我就立即查找原因,在functions.php中发现了两处新添加的代码。故有了此篇文章。

正文

正如前言所说,我在functions.php发现了两处新代码,分别是注释为

1.Gravatar头像使用镜像服务器

2.静态资源使用七牛 CDN

本身我前段时间提及的优化就有说,通过用七牛云

实现动静态分离来达到

加速

的效果。刚好此处有两处现成的代码,所以我也赶紧去做。

首先,先观察了两处代码的特征发现,注释为“Gravatar头像使用镜像服务器”的是通过将Gravatar头像缓存至七牛云上的空间使之能够快速加载gravatar头像而不是加载境外网站,根据注释,也就说明是镜像外网。毕竟都知道境外网站大多已被墙,很多朋友也看到了浏览器左下角经常会显示如下图的情况,但是如果使用了这个方法过后,就无需再加载境外网站使wordpress的速度得到提升。

所以,打算使用这串代码,因为我博客就时常会出现上图的情况。

接下来,我又去看了注释为静态资源使用七牛CDN的代码,看之发现里面出现png|jpg|jpeg|gif|bmp|zip|rar|7z,除了结尾的zip、rar和7z,其他的皆为图片格式,却不见js、css之类的,说明这处的静态资源使用七牛CDN主要是指图片使用七牛云CDN,而js、css都还是依然使用本身的。不过也还是不错,这处代码也被采纳。当然如果想把js、css也弄进来只需在我刚才说的那里添加|css|js,这样写就行

// Gravatar头像使用镜像服务器
function dw_get_avatar($avatar) {
$avatar = str_replace(array("www.gravatar.com","0.gravatar.com","1.gravatar.com","2.gravatar.com","secure.gravatar.com"),"image.biji.io",$avatar);
return $avatar;
}
add_filter( 'get_avatar', 'dw_get_avatar', 10, 3 );

 

而且大家可以看到上方两处代码都有tokin的网址,说明此处需要替换为自己的。但是到底要怎么实现和七牛云的对接呢?我刚好找到404.dog的博客里有介绍使用方法。这里是他的文章地址 https://404.dog/38.html 需要的朋友可以去看看。我就不写了。

结语

目前我只使用了静态资源使用七牛云CDN加速,Gravatar头像那块还没有弄,因为七牛云对自定义域名的审核速度太慢了,特别是https类的,我现在还在审核当中,等通过后,我也会立即加上的。如果有什么不懂的地方可以问我。

纯代码实现禁言XML-RPC 接口

前言

群里老有朋友问怎么删除头部的xmlrpc.php链接,其实就是通过禁用来达到,我只想说百度上其实一大片,不过既然有人需要,那么我也发一个。因为这确实是有好处的,特别是对于那些不用客户端的朋友。因为黑客可以利用xmlrpc.php文件来绕过wordpress后台的登录错误限制从而进行爆破,然后控制你的网站。

正文

加入到主题目录中的functions.php中去

add_filter('xmlrpc_enabled', '__return_false');
remove_action( 'wp_head', 'rsd_link' );

或者还有一种办法实现,那就是直接删除xmlrpc.php文件或者设置禁止访问

结语

使用本代码会出现无法使用客户端的情况,所以请慎用。

纯代码实现下载按钮

前言

由于做了基础优化过后,叶子的部分功能和插件皆已失效,特别是之前集成的下载功能完全错位,故只好另外寻求办法解决。故有了这篇文章!

正文

很多时候我们写软件分享或者其他需要用到网盘或者下载功能的时候,很多朋友只能选择直接粘贴下载地址在文章当中,但是那样的后果就是丑陋或者说简陋,简直是low爆了。所以叶子给大家带来了不一样的下载功能,且无需插件,仅需几串代码即可轻松实现。

教程

将以下代码放进主题目录中的functions.php中(由于本站采用了全局pjax的原因,请在此页面点击F5进行刷新,方可正常显示代码)

//添加下载按钮
function appthemes_add_quicktags() {
?><script type="text/javascript">// <![CDATA[
QTags.addButton( 'downs', '下载按钮', '<div class="sg-dl"><span class="sg-dl-span"><a href="','" target=_blank title="文件下载" rel=nofollow><button type="button" class="btn-download">本地下载</button></a></span></div>' );
// ]]></script><?php } add_action('admin_print_footer_scripts', 'appthemes_add_quicktags' );

这样我们就已经实现了下载功能,只要你在写文章的时候,将可视化编辑器调整成文本模式即可看到下载按钮,如下图。
然后我们还需要一个css样式,叶子在这里提供给大家叶子所使用的样式。如果你不喜欢这个样式也可以自己进行修改。

.btn-download{color:#fff;background:#169FE6;border-top:0;border:2px solid #fff;padding:10px 16px;font-size:18px;line-height:1.33;border-radius:5px;opacity:.8;text-indent:0;margin-top:5px;margin-bottom:5px;display:inline-block;font-weight:400;text-align:center;text-decoration:none;white-space:nowrap;vertical-align:middle;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;}
.btn-download:hover{color:#169FE6;background-color:#fff;border-color:#169FE6;}
.sg-dl{margin:20px 0 10px 0;text-align:center;}
.sg-dl .sg-dl-span{margin:0 auto;}

下载按钮效果图

结语

如果本篇文章有帮助到你的话,还请留言支持叶子,莫做那可恶的伸手党。

 

 

纯代码实现去除分类category

前言

因为一位朋友在群里询问我如何纯代码去除分类category,他说他在百度上搜了很多,发现上传后都出错。虽然不知道他什么原因出错。不过既然有朋友需要,那么我就分享出来我的解决方案吧。代码来自互联网,出自哪儿不清楚。

代码

你要做的其实很简单,仅仅只需将代码放进主题的functions.php文件中即可,代码就在下方。

//去除分类标志代码
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;
}

最后

上传代码后,请记得将固定链接更新下,然后就成功了。其实很简单,多动动手,百度或者谷歌之类,其实很容易找到你想要的答案!

1 2 3