免插件实现WordPress文章浏览次数刷新不增加

wordpress显示浏览次数,很多人都是安装WP-Postviews插件来实现的。不过,其实不用插件也可以实现显示WordPress浏览次数。

非插件统计文章浏览次数

在主题的 functions.php文件的最后一个 ?> 前面添加下面的代码:

/* 访问计数 */
function record_visitors()
{
    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’, ‘record_visitors’);
/// 函数名称:post_views
/// 函数作用:取得文章的阅读次数
function post_views($before = ‘(点击 ‘, $after = ‘ 次)’, $echo = 1)
{
  global $post;
  $post_ID = $post->ID;
  $views = (int)get_post_meta($post_ID, ‘views’, true);
  if ($echo) echo $before, number_format($views), $after;
  else return $views;
}

在需要显示该统计次数的地方(一般是single模板内)使用下面的代码调用:

阅读:<?php post_views(' ', ' 次'); ?>
不过,上面的代码有个弊端,就是当用户不停的刷新页面时,不但浏览数会狂增,还会给数据库带来负担。下面是改进版。

非插件统计文章浏览次数(带cookie时间限制)

function record_visitors() {

    if(is_singular()) {

        global $post;

        $post_ID=$post->ID;

        if($post_ID) {

            if(isset($_COOKIE[‘views’ . $post_id . COOKIEHASH])&& $_COOKIE[‘views’ . $post_id . COOKIEHASH]==’1′)

                return;

            $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);

            }

            setcookie(‘views’.$post_id.COOKIEHASH,’1′,time() + 3600 * 24, COOKIEPATH,COOKIE_DOMAIN);//设置cookie过期间隔为1天

            //setcookie(‘views’.$post_id.COOKIEHASH,’1′,0, COOKIEPATH,COOKIE_DOMAIN);//设置关闭浏览器cookie即过期

        }

    }

}

add_action(‘wp_head’, ‘record_visitors’);

function post_views($before = ‘浏览’, $after = ‘次’, $echo = 1) {

    global $post;

    $post_ID=$post->ID;

    $views=(int) get_post_meta($post_ID, ‘views’, true);

    if($echo)

        echo $before, number_format($views), $after;

    else

        return $views;

}

上面的代码默认是cookie有效期为1天,意思是你一天内打开同一页面,无论如何刷新,浏览次数都不会变的(除非你清空cookie)。

调用方式:在需要显示该统计次数的地方(一般是single模板内)使用下面的代码调用:

<?php if (function_exists(‘post_views’)) post_views(); ?>

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获取文章、tag、分类别名(postname)的方法

分享一下如何获取wordpress文章的postname以及标签(tag)、分类(category)的别名方法。文章的别名,也称 slug name,默认情况下是没有相关的函数获取文章别名的,这时候我们就可以自己写一个函数来实现。

在主题的functions.php中添加以下函数:

function the_slug() {//获取文章别名
    $post_data = get_post($post->ID, ARRAY_A);
    $slug = $post_data[‘post_name’];
    return $slug;
}

然后你就可以在你需要的地方调用该函数了:

<?php echo the_slug(); ?>

该函数在index.php的主循环中可以正常使用,在single.php中未加循环的情况下也可以正常使用;

$post在主循环外部仍然有效,可以不必添加全局变量声明。

下面是获取tag别名的方法

<?php

//获取tag别名
$post_tags = wp_get_post_tags($post->ID);

if ($post_tags)
    echo $post_tags[0]->slug;

?>

只是如果你的tag是中文的话,返回的别名是一堆类似乱码一样的字符。

<?php
/*
* 获取当前文章所属第一个分类别名的函数
*/
function the_category_slug(){
$category = get_the_category();
return ($category ? $category[0]->slug : “”);
}
?>
使用方法如下:

<?php
// 输出文章分类的别名
echo the_category_slug();
?>

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  我只是做个备忘