标签 WordPress 下的文章

WORDPRESS百度PING服务不兼容及解决方法

ping是基于XML_RPC标准协议的更新通告服务,是一种用于博客在内容更新后通知百度博客搜索及时进行抓取、更新的方式。百度博客搜索在成功接受到ping以后,会立刻进行抓取并更新。使用ping服务,可以让百度博客搜索在第一时间抓取到您博客上的新内容。 以上是百度官方的介绍。从意思上理解,这个ping服务应该不错的呀,可以及时通知百度我的网站更新了,告诉它赶紧过来爬网吧。而且,这个ping 服务貌似和Google等的API接口貌似也是兼容的,都是调用weblogUpdates.extendedPing方法,而且采用的参数貌似也是一样 的,从而给了人们一种错觉。 所以有的网友就发博文了,使用wordpress程序的博客只要在通告服务处填上”http://ping.baidu.com/ping/RPC2″就可以通知百度了,貌似很方便的样子。 但是实际上并非如此。我今天发现,百度的ping服务和Google等的ping是不兼容的。虽然都是调用的 weblogUpdates.extendedPing方 法,但是在参数方面有一些细微的差别:

WordPress默认的ping服务是3个参数,即网站 名称,首页地址,feed地址;

而百度ping呢,则是4个参数,即网站名称,首页地址,新网页的地址,feed地址。 正是这一个参数的差别,我们就不能 使用wordpress自带的ping服务了。

实现方法,在functions.php中加入如下代码:

function ping_baidu_on_newpost($post_id) {
    $baiduXML = '
    weblogUpdates.extendedPing' . get_option('blogname') . '' . home_url() . '' . get_permalink($post_id) . '
    ' . get_feed_link() . '
    ';
    $wp_http_obj = new WP_Http();
    noff_log($baiduXML);
    $return = $wp_http_obj->post('http://ping.baidu.com/ping/RPC2',
            array('body' => $baiduXML, 'headers' => array('Content-Type' => 'text/xml')));
    if(isset($return['body'])){
        if(strstr($return['body'], '0')){
            noff_log('ping baidu succeeded!');
        }
        else{
            noff_log('ping baidu failed!');
        }
    }else{
        noff_log('ping baidu failed!');
    }
}
function noff_on_newpost($post_id) {
    noff_log('start to ping baidu');
    ping_baidu_on_newpost($post_id);
}
add_action('publish_post', 'noff_on_newpost');

 

“不需要升级,您的WordPress数据库已经是最新的了!”导致进不了WordPress管理后台的问题

今天突然发现,进不去WordPress后台管理页面了,登录之后,屏幕上就两句话:

不需要升级
您的WordPress数据库已经是最新的了!

由于我今天没有升级过WordPress,也没做什么后台设置更改,并且我从来没见过这个提示,所以刹那间心一凉,心想我的WordPress数据库不是出什么问题了吧?
于是问Google,查到这个问题是由于使用了object-cache缓存插件导致的问题,于是解决了,如下。

『1』 登录Linux terminal,禁用object-cache缓存插件
这里假设你使用的是VPS,所以让你登录Linux terminal,进入WordPress的安装目录下的 wp-content 子目录下:

mv object-cache.php object-cache.php.bak

重命名一下,你就会发现,WordPress的管理后台已经可以进去了!但是这样object-cache就是无效的,如何让它继续用起来?据我实验,如果你直接把上面重命名过的文件恢复原来的文件名,WordPress的管理后台又不能登录了,还是如标题所述的错误提示,于是要继续下面的操作。

『2』 flush memcache

Flush Memcache 操作之后,再到 wp-content 子目录下恢复刚才重命名的文件:

mv object-cache.php.bak object-cache.php

此时再登录WordPress管理界面,一切正常了,瞬间感觉世界很美好。

解决 WordPress“正在执行例行维护,请一分钟后回来”

WordPress在升级程序、主题、插件时,都会先切换到维护模式,也就是显示 “正在执行例行维护,请一分钟后回来(Briefly unavailable for scheduled maintenance. Check back in a minute)”,如果升级顺利,也就几秒左右就恢复正常;但是如果由于网速不佳等原因导致升级中断,WordPress就会一直停留在维护模式,不论前台还是后台,都一直显示“正在执行例行维护,请一分钟后回来“。

如何解决这个问题呢?

1.马上通过FTP登录你的网站,删除WordPress根目录下的 .maintenance ,刷新网页即可。

2.但是有时候你会发现,根目录根本就没有 .maintenance!倡萌最近就遇到这个问题,最初以为是隐藏了,所以使用SSH登录服务器,但是依旧没有看到,怎么办?其实有一个比较简单的办法,直接新建一个空的txt文本,上传到主机空间中,然后重命名为 .maintenance,然后你会发现 .maintenance 居然不见了!不用担心,重新刷新你的网站,是不是正常了?!

3.如果还是不行,或者你想让它以后可以显示 .maintenance ,那就打开 /wp-admin/includes/class-wp-filesystem-direct.php

找到下面的代码:

	function mkdir($path, $chmod = false, $chown = false, $chgrp = false) {
		// safe mode fails with a trailing slash under certain PHP versions.
		$path = untrailingslashit($path);
		if ( empty($path) )
			return false;

		if ( ! $chmod )
			$chmod = FS_CHMOD_DIR;

		if ( ! @mkdir($path) )
			return false;
		$this->chmod($path, $chmod);
		if ( $chown )
			$this->chown($path, $chown);
		if ( $chgrp )
			$this->chgrp($path, $chgrp);
		return true;
	}

 

将其改为:

function mkdir($path, $chmod = false, $chown = false, $chgrp = false) {
 // safe mode fails with a trailing slash under certain PHP versions.
 if ( ! $chmod )
 $chmod = $this->permission;

if(ini_get('safe_mode') && substr($path, -1) == '/')
 {
 $path = substr($path, 0, -1);
 }

if ( ! @mkdir($path) )
 return false;
 $this->chmod($path, $chmod);
 if ( $chown )
 $this->chown($path, $chown);
 if ( $chgrp )
 $this->chgrp($path, $chgrp);
 return true;
}

 

然后刷新FTP目录,是不是看到.maintenance了,删除它吧!

WordPress文章同步到新浪微博的三种方法

同步到微博大概有三种方法,插件、关联博客、非插件微博接口

第一种,直接百度搜索就可以;
第二种,由于新浪现在已经取消了关联博客的选项,但该功能却没有被取消你可以放问下面这个地址,然后配置一下就可以了

http://weibo.com/tool/bloglink

第三种方法需要使用新浪的接口,如下操作:
1)到新浪微博开放平台创建一个站内应用http://open.weibo.com/apps/new?sort=app,通过不通过审核都可以,只不过通过的话可以在微博下方显示来自某某应用,如来自 Dammit! ,具体怎么创建你可以在百度谷歌上搜索一下,很简单(但如果你一直没有通过审核,还想通过审核的话,我可以提供有偿帮助嘎嘎~),创建好应用后,下面需要使用到申请应用的 App Key;
2)编辑你主题的functions.php文件,在其最后加入如下代码

// 微博同步
function post_to_sina_weibo($post_ID) {
  if( wp_is_post_revision($post_ID) ) return;
    $get_post_info = get_post($post_ID);
    $get_post_centent = get_post($post_ID)->post_content;
    //去掉文章内的html编码的空格、换行、tab等符号(如果你文章的编码格式是这样子,可以将下面的"//"去掉即开启此功能)
    //$get_post_centent = str_replace("t", " ", str_replace("n", " ", str_replace(" ", " ", $get_post_centent)));
    $get_post_title = get_post($post_ID)->post_title;
  if ( $get_post_info->post_status == 'publish' && $_POST['original_post_status'] != 'publish' ) {
    $request = new WP_Http;
    $status = '【' . strip_tags( $get_post_title ) . '】 ' . mb_strimwidth(strip_tags( apply_filters('the_content', $get_post_centent)),0, 132,'...') . ' 全文地址:' . get_permalink($post_ID) ;
    $api_url = 'https://api.weibo.com/2/statuses/update.json';
    $body = array( 'status' => $status, 'source'=>'4135063399');
    $headers = array( 'Authorization' => 'Basic ' . '1fFjYc3uQHZpcF32fS5jb146MxFeY19DYF53aWfzNA==' );
	/*
	如果你使用改方法,请注释掉上面$headers = array( 'Authorization' => 'Basic ' . '1fFjYc3uQHZpcF32fS5jb146MxFeY19DYF53aWfzNA==' );
	换成如下代码
	//你的新浪微博登陆名
	$username = '' ;
	//你的新浪微博登陆密码
	$password = '' ;
	$headers = array( 'Authorization' => 'Basic ' .  base64_encode('$username:$password'));
	*/
    $result = $request->post( $api_url , array( 'body' => $body, 'headers' => $headers ) );
    }
}
add_action('publish_post', 'post_to_sina_weibo', 0);

 

大概一般都应该知道是什么意思吧
if( wp_is_post_revision($post_ID) ) return;
//如果是修订版本

$get_post_info = get_post($post_ID);
//获取该文章信息
$get_post_centent = get_post($post_ID)->post_content;
//文章内容(不知道为什么在使用获取全部post_ID数据后没办法得到content,所以单独在请求下)
$get_post_title = get_post($post_ID)->post_title;
//文章标题
if ( $get_post_info->post_status == ‘publish’ && $_POST['original_post_status'] != ‘publish’ ) {
//判断是不是已经发表的文章或页面
$status = ‘【’ . strip_tags( $get_post_title ) . ‘】 ‘ . mb_strimwidth(strip_tags( apply_filters(‘the_content’, $get_post_centent)),0, 132,’…’) . ‘ 全文地址:’ . get_permalink($post_ID) ;
// strip_tags( $get_post_title ) 是获取文章标题

// mb_strimwidth(strip_tags( apply_filters(‘the_content’, $get_post_centent)),0, 132,’…’) 是截取文章的长度
// get_permalink($post_ID) 该文章链接地址
$api_url = ‘https://api.weibo.com/2/statuses/update.json’;
//老接口用不了了,必须用v2.0
$body = array( ‘status’ => $status, ‘source’=>’4135063399′);
// $status 要发布的微博文本内容,内容不超过140个汉字

// $source 数值为应用的AppKey
$headers = array( ‘Authorization’ => ‘Basic ‘ . ‘bate64编码加密’ );
//这里的’bate64编码加密’位置,你自己到http://www.mxcz.net/tools/base64.aspx自己把你的帐号密码进行一下加密,格式是你新浪微博的登陆帐号:登陆密码(如,username@gmail.com:password)
//如果不喜欢这么使用$headers = array( ‘Authorization’ => ‘Basic ‘ . ‘bate64编码加密’ ),就替换使用下面这个方法也可以,一样
//你的新浪微博登陆名

$username = ” ;
//你的新浪微博登陆密码
$password = ” ;
$headers = array( ‘Authorization’ => ‘Basic ‘ . base64_encode(‘$username:$password’));

 

 

最后会在你发送博文后,马上同步一条信息到微博上.

该微博接口请求参数:

 

必选

类型及范围

说明

source

false

string

采用OAuth授权方式不需要此参数,其他授权方式为必填参数,数值为应用的AppKey

status

true

string

要发布的微博文本内容,必须做URLencode,内容不超过140个汉字。

visible

false

int

微博的可见性,0:所有人能看,1:仅自己可见,2:密友可见,3:指定分组可见,默认为0。

access_token

false

string

采用OAuth授权方式为必填参数,其他授权方式不需要此参数,OAuth授权后获得。

list_id

false

string

微博的保护投递指定分组ID,只有当visible参数为3时生效且必选。

lat

false

float

纬度,有效范围:-90.0到+90.0,+表示北纬,默认为0.0。

long

false

float

经度,有效范围:-180.0到+180.0,+表示东经,默认为0.0。

annotations

false

string

元数据,主要是为了方便第三方应用记录一些适合于自己使用的信息,每条微博可以包含一个或者多个元数据,必须以json字串的形式提交,字串长度不超过512个字符,具体内容可以自定。

WordPress显示数据库查询次数和查询花费时间

WordPress提供了一些功能函数可以轻松地显示数据库查询的统计信息,这些信息可以公开地显示在网页中,或者隐藏在源代码中,更或者只有你自己可以看到。

WordPress主要提供了两个统计函数:

1.网页加载时查询数据库的次数:

<?php echo get_num_queries(); ?>

 

2.服务器端完成这些查询所花费的时间:

<?php timer_stop(7); ?>

 

可以使用3种方式在网页中显示:

1. 公开地显示查询的统计信息:

如果你觉的你的服务器或空间的处理速度好,或者想让你的访问者看到这些查询统计信息的话,你可以将这些统计信息公开显示在页面中:(效果查看博客的页面底部)

<p>< ?php echo get_num_queries(); ?> queries in < ?php timer_stop(3); ?> seconds</p>

 

2. 将统计信息显示在源代码中,而不出现页面的内容中:

如果你不想将统计信息显示在页面上供访问者查看,但又想自己可以知道这些统计信息,那么你可以通过html的注释将结果只显示在源代码中(PS:大家也可以从源代码中查看的哦!):

<!-- <?php echo get_num_queries(); ?> queries in < ?php timer_stop(3); ?> seconds -->

 

3. 统计信息只有你自己登录了后可以看到:

该方法是第二种显示的优化方法,只需博客管理员登录后就可以查看查询统计信息,访问者是无法查看的:

< ?php if (current_user_can('level_10')) {
echo '<!-- ' . get_num_queries() . ' queries in ' . timer_stop(3) . ' seconds -->';
} ?>

 

如果想查看具体查询了数据库哪些内容,可以用如下解决方法:

1、首先在 wp-config.php 里添加如下代码:

define('SAVEQUERIES',true);

 

然后在 footer.php 里添加如下代码:

<?php if(is_user_logged_in()){
global $wpdb;
echo "<pre>";
print_r($wpdb->queries);
echo "</pre>";
}?>

 

分析:

1、if (is_user_logged_in()) 用于判断当前访客是否已登录,也可以用 if (current_user_can('level_10')) 来判断是否为管理员登录,目的是为了不让游客查看到这些数据,此代码可省;

2、global $wpdb; 定义全局变量$wpdb,这是Wordpress默认的数据库类;

3、<pre></pre>将结果嵌套在HTML标签<pre>内;

4、print_r($wpdb->queries); 输出各次数据库查询的信息。

刷新首页或日志页,可看到类似如下的输出结果:

Array
(
[0]=>Array
(
[0]=> SELECT SQL_CALC_FOUND_ROWS wp_posts.* FROM wp_posts WHERE 1=1 AND wp_posts.post_type ='post' AND (wp_posts.post_status ='publish' OR wp_posts.post_status ='private') ORDER BY wp_posts.post_date DESC LIMIT 0,10
[1]=>0.0003960132598877
[2]=>require, wp, WP->main, WP->query_posts, WP_Query->query, WP_Query->get_posts
)
 
[1]=>Array
(
[0]=> SELECT option_value FROM wp_options WHERE option_name ='nuodou_header_code' LIMIT 1
[1]=>0.0013589859008789
[2]=>require, require_once, include, get_header, locate_template, load_template, require_once, get_option
)

 

下面的活儿就得自己分析了,看看哪些是可以删除,哪些是可以改进的,以减少数据库查询次数。

 

2025 年 5 月
 1234
567891011
12131415161718
19202122232425
262728293031  

广告

分类

近期评论

标签

历史上的今天

归档