修改WordPress邮件通知的发件人

使用新的主机,发现我的WordPress可以不使用插件就可以发送通知邮件了,但是发件人是wordpress,与之前自定义的不一样。搜索找到方法,记录一下

修改wp-includes目录下的pluggable.php文件,在最后一行加入如下代码:
// 更改默认发信地址
add_filter(‘wp_mail_from’,’mail_from’);
function mail_from() {
$emailaddress = ‘admin@yourname.com’; //你的邮箱地址
return $emailaddress;
}

// 更改默认发信人名字
add_filter(‘wp_mail_from_name’,’mail_from_name’);
function mail_from_name() {
$sendername = ‘youname’; //你的名字
return $sendername;
}

在电脑上也能玩兴趣部落——解决在电脑上完成触屏操作的问题

兴趣部落是一款在手机QQ上的类似贴吧的产品,我现在每天的工作就是围绕兴趣部落,前几天运气背,把手机给整坏了,木有手机了,工作怎么进行。虽然我们有可用PC端的后台,但是我就想用玩前端的,前端的才可以发帖,回帖嘛,要不然玩得多没意思。

正文开始

1.准备工具:chrome浏览器(我使用的是chrome 38,不同的版本可能有细微的差别)

2.打开兴趣部落的网址:http://xiaoqu.qq.com/mobile/(网址会变成其他,不用担心,如果不放心也可以把这一步放在第五步之后)(网址可以通过关注兴趣部落官方微信获取噢 o(∩_∩)o )

3.按F12 打开浏览器的开发者工具;

4.按图示操作,先选择弹出的开发者工具的左上角第二个图标,再点击右边圈中的按钮,并最小化弹出窗口(切记弹出的窗口不可以关闭。)

20141104081200
(点击可以放大)

5.按图示设置,手机机型建议选择安卓机型,(苹果机型进去后没有搜索框,其它机型请自行测试)

20141104084248
(点击可以放大)

6.按F5刷新页面,即可见到熟悉的页面了

现在鼠标就是你的手的了,你可以用鼠标的点击代替手指的点按,用鼠标的点击按住拖动鼠标来代替手指的滑动。

以上的方法适用于所有你想在电脑端浏览手机版页面,因为chrome浏览器已经帮我们配置好了手机模拟环境,不行你可以试试打开 腾讯网http://3g.qq.com/ 新浪网http://3g.sina.com.cn/ 是不是都是手机版的页面呢,你选的手机型号比较NB的,还是触屏版噢,还能用鼠标操作噢。

从一个小小的搜索框看

很多时候,可能我们觉得这是理所当然、就是应该这样去做的事情,但是用户却不这样认为。

我现在的工作就是围绕兴趣部落,一个类似于贴吧、存在于手机QQ里的产品。  点击了解详情
这是一张从兴趣部落官网拷过来的一张图片
xingqubuluoBanner

我要说就是下图中一个小小的搜索框,输入内容后,点按输入法键盘中的回车进行搜索,设计的初衷也是希望用户点按键盘上的回车进行搜索,但是我们团队里有几个小伙伴在不被他人告知的情况下,不知道如何去发起搜索,更有甚者尝试点按搜索框前的放大镜发起搜索。我有理由相信有很多的用户小伙伴不知道怎么搜索,这算是产品设计的失败吗?

20141103235750(点击查看大图)

上图是兴趣部落的搜索截图

比较一下,手机QQ,微信上的搜索框。这两款软件的搜索都没有设置发起搜索的按钮,仔细对比了一下,发现手机QQ,微信里搜索是有模糊搜索功能,输入内容后,直接就有搜索结果在列表里可供点选了,而在兴趣部落里没有显示这个搜索结果的列表,所以导致出现了上面的有意思的事情。

20141104003222  20141104003234   20141104003230
(点击查看大图)

(问题已经反馈到我的上级了,估计下个版本会有改进的。)

点按键盘上的回车,确认输入的内容,发起所需要的动作,多么简单的事情,由多么理所当然的事情,但不是每个人都认为这是理所当然的事情,他们觉得就是得有一个叫搜索的按钮可以点按才行,要不你给我把搜索结果显示出来,让我选。

手机QQ这么一个覆盖人群广的产品,上面居然出现了这么一个问题。让人汗颜!

查找附近的点——使用Geohash.class.php

在做微信的时候想到很多微信服务号有查找附近门店,网点的功能,如顺丰快递,就可以发送位置信息,就可以得到附近的收寄件网点。

如何实现这样的功能呢?

实现的方法有2种(文章写的比较粗略也,小儿科,高手可以移步至http://www.wubiao.info/372

1.将用户的位置(坐标)与数据库中所有坐标对比,计算出距离,并按距离由远到近进行排序,这方法是不是太笨了

2.高级模式:

因为每个坐标都有两个数,我们平常更关注的长度,两个数就不便于对数排序计算了。
所以我们可以坐标重新编码,编码原理Geohash,参看维基百科,或http://www.wubiao.info/372,在数据库保存编码。比如:坐标(22.539341,113.995115)按照Geohash编码后为:uxbpbzuxuxyz因为编码规则是将两个坐标的数字交叉进行,所以以后查询附近的点可以用类似LIKE ‘uxbpbzux%’语句查询,调整uxbpbzux的长度就可以对附近的距离的值设定了。

 

微信公众账号开发

关注了很多微信公众账号,曾经也想过:我可不可以运营一个微信公众帐号?但总觉得不知做什么好。

最近又想折腾一下微信公众帐号,帐号早就注册了,没有怎么弄,现在尝试动动,用开发者模式折腾折腾。

现在基本实现了,对发送内容判断,并自动回复,了解了微信公众帐号的大致逻辑。

微信就是一个管道,用户发送信息到达微信服务器,微信服务器把信息发送到我们应用服务器,我们应用服务器处理之后返回给微信,最后微信再发送给用户,画个图:20140918162402

附上我微信公众帐号代码

[php]

<?php
/*
* wechat test
*/

define("TOKEN", "weixin"); //定义常量TOKEN
$wechatObj = new wechatCallbackapiTest();
//如果判断GET请求是否存在echostr变量
if (isset($_GET[‘echostr’])) //判断是否存在 echoStr 随机字符串
{
$wechatObj->valid();
}else{
$wechatObj->responseMsg();
}
class wechatCallbackapiTest
{
public function valid()
{
$echoStr = $_GET["echostr"];
if($this->checkSignature()){
echo $echoStr;
exit;
}
}

private function checkSignature()
{
$signature = $_GET["signature"];
$timestamp = $_GET["timestamp"];
$nonce = $_GET["nonce"];

$token = TOKEN;

$tmpArr = array($token, $timestamp, $nonce);
sort($tmpArr);
$tmpStr = implode( $tmpArr );
$tmpStr = sha1( $tmpStr );

if( $tmpStr == $signature ){
return true;
}else{
return false;
}
}

public function responseMsg()

{
$postStr = $GLOBALS["HTTP_RAW_POST_DATA"];//响应消息方法,接收上述原始POST数据

if (!empty($postStr)){
$postObj = simplexml_load_string($postStr, ‘SimpleXMLElement’, LIBXML_NOCDATA);
$RX_TYPE = TRIM($postObj->MsgType);
switch ($RX_TYPE)
{
case "text": //文本消息
$result = $this->receiveText($postObj);
break;
case "image": //图片消息
$result = $this->receiveImage($postObj);
break;
case "voice": //语音消息
$result = $this->receiveVoice($postObj);
break;
case "video": //视频消息
$result = $this->receiveVideo($postObj);
break;
case "location"://位置消息
$result = $this->receiveLocation($postObj);
break;
case "link": //链接消息
$result = $this->receiveLink($postObj);
break;
default:
$result = "unknow msg type: ".$RX_TYPE;
break;
}
echo $result;
}else{
echo "";
exit;
}
}
/*
* 接收文本消息 */
private function receiveText($object) {
$keyword = trim($object->Content);
if($keyword == "文本"){
$content = "这是文本消息";
$result = $this->transmitText($object, $content);
}
else if($keyword == "图文"||$keyword == "单图文"){
$content = array();
$content[] = array("Title"=>"图文标题1","Description"=>"","PicUrl"=>"https://ilidong.com/wx/320200.jpg","Url"=>"https://ilidong.com");

$result = $this->transmitNews($object, $content);
}
else if($keyword == "多图文"){
$content = array();
$content[] = array("Title"=>"单图文标题","Description"=>"","PicUrl"=>"https://ilidong.com/wx/320200.jpg","Url"=>"https://ilidong.com");
$content[] = array("Title"=>"图文标题2","Description"=>"","PicUrl"=>"https://ilidong.com/wx/200200.jpg","Url"=>"https://ilidong.com");
$content[] = array("Title"=>"图文标题3","Description"=>"","PicUrl"=>"https://ilidong.com/wx/200200.jpg","Url"=>"https://ilidong.com");
$result = $this->transmitNews($object, $content);
}
else if($keyword == "音乐"){
$content = array("Title"=>"最炫民族风",
"Description"=>"哈哈民族风",
"MusicURL"=>"http://121.199.4.61/music/zxmzf.mp3",
"HQMusicUrl"=>"http://121.199.4.61/music/zxmzf.mp3");
$result = $this->transmitMusic($object,$content);
}
else if($keyword == "笑话"){
require_once(‘xiaohua.php’);
$content = $xiaohua_rs;
$result = $this->transmitXiaohua($object, $content);
}
else{
$content = "额,好像在哪见过,让我想想\n/爱心功能还在开发之中…\n要不就要等人肉回复/调皮";
$result = $this->transmitText($object, $content);

}
return $result; }

/*接收位置信息*/
private function receiveLocation($object){
$weixinid=trim($object->FromUserName);
$LocationX=trim($object->Location_X);
$LocationY=trim($object->Location_Y);
include("UserLocation.php");
$content = updateOrInsert($weixinid, $LocationX, $LocationY);
//$content=$weixinid."\n".$LocationX."\n".$LocationY;
$result = $this->transmitText($object, $content);
return $result;
}

/* 回复文本消息 */
private function transmitText($object, $content) {
$textTpl = "<xml>
<ToUserName><![CDATA[%s]]></ToUserName> <FromUserName><![CDATA[%s]]></FromUserName>
<CreateTime>%s</CreateTime> <MsgType><![CDATA[text]]></MsgType>
<Content><![CDATA[%s]]></Content> </xml>";
$result = sprintf($textTpl, $object->FromUserName, $object-> ToUserName, time(), $content); return $result;
}

/* 回复图文消息 */
private function transmitNews($object, $arr_item) {
if(!is_array($arr_item))
return;
$itemTpl = " <item>
<Title><![CDATA[%s]]></Title> <Description><![CDATA[%s]]></Description>
<PicUrl><![CDATA[%s]]></PicUrl> <Url><![CDATA[%s]]></Url>
</item> ";
$item_str = "";
foreach ($arr_item as $item) $item_str .= sprintf($itemTpl, $item[‘Title’], $item [‘Description’], $item[‘PicUrl’], $item[‘Url’]);
$newsTpl = "<xml>
<ToUserName><![CDATA[%s]]></ToUserName>
<FromUserName><![CDATA[%s]]></FromUserName>
<CreateTime>%s</CreateTime>
<MsgType><![CDATA[news]]></MsgType>
<Content><![CDATA[]]></Content>
<ArticleCount>%s</ArticleCount>
<Articles> $item_str</Articles>
</xml>";
$result = sprintf($newsTpl, $object->FromUserName, $object-> ToUserName, time(), count($arr_item)); return $result;
}

//回复音乐信息
private function transmitMusic($object, $musicArray) {
$itemTpl = "<Music>
<Title><![CDATA[%s]]></Title>
<Description><![CDATA[%s]]></Description>
<MusicUrl><![CDATA[%s]]></MusicUrl>
<HQMusicUrl><![CDATA[%s]]></HQMusicUrl>
</Music>";
$item_str = sprintf($itemTpl, $musicArray[‘Title’], $musicArray [‘Description’], $musicArray[‘MusicUrl’], $musicArray[‘HQMusicUrl’]);
$textTpl = "<xml>
<ToUserName><![CDATA[%s]]></ToUserName>
<FromUserName><![CDATA[%s]]></FromUserName>
<CreateTime>%s</CreateTime>
<MsgType><![CDATA[music]]></MsgType>
$item_str </xml>";
$result = sprintf($textTpl, $object->FromUserName, $object-> ToUserName, time());
return $result; }

/* 回复笑话消息 */
private function transmitXiaohua($object, $content) {
$textTpl = "<xml>
<ToUserName><![CDATA[%s]]></ToUserName> <FromUserName><![CDATA[%s]]></FromUserName>
<CreateTime>%s</CreateTime> <MsgType><![CDATA[text]]></MsgType>
<Content><![CDATA[%s]]></Content> </xml>";
$result = sprintf($textTpl, $object->FromUserName, $object-> ToUserName, time(), $content); return $result;
}
}
?>
[/php]

参考方倍工作室:http://txw1958.cnblogs.com/