鲍成龙
不敢言提笔出砚,倚马千言。亦必愿衣袂胜仙,惊才绝艳。
鲍成龙

WordPress有关文章置顶的问题,经常让新手迷惑。

其关键就在于,WP_Query 的 ignore_sticky_posts 参数。这个参数为false,则会在查询结果的头部,附带所有的置顶文章。ignore_sticky_posts 默认值为 false。

在开发中,最好把 ignore_sticky_posts 总是设置为 true。如果需要置顶文章,则使用下面的方法:

$args = array(
    'post__in'            => get_option( 'sticky_posts' ),
    'ignore_sticky_posts' => 1,
);
$query = new WP_Query( $args );

如果,想查询分类6下的文章,但是想在查询结果中排除分类6中已置顶的文章(置顶文章在其他地方展示),可以参考以下代码:

$sticky = get_option( 'sticky_posts' );
$args = array(
    'cat'                 => 6,
    'ignore_sticky_posts' => 1,
    'post__not_in'        => $sticky,
);
$query = new WP_Query( $args );

这样做的好处就是脑子里不用老想 ignore_sticky_posts 这个参数了,坏处就是有时候要多一次查询操作。

鲍成龙
<input enterkeyhint="enter">
<input enterkeyhint="done">
<input enterkeyhint="go">
<input enterkeyhint="next">
<input enterkeyhint="previous">
<input enterkeyhint="search">
<input enterkeyhint="send">
关键字值 描述
enter ‘enter’表示回车,多出现在<textarea>文本域等需要多行输入的场景中。
done ‘done’表示完成,表示没有更多内容输入,输入结束。
go  ‘go’表示前往,, 意思是把用户带到他们输入的文本的目标处。/td>
next ‘next’表示下一项,通常会移动到下一个输入项那里。
previous ‘previous’表示上一个,通常会移动到上一个输入项那里。
search ‘search’表示搜索,通常用在搜索行为中。
send ‘send’表示发,通常用在文本信息的发送上。
鲍成龙

WordPress 对象缓存机制和服务器设置

WordPress 对象缓存(英文名是:Object Cache)就是 WordPress 的缓存机制。

它的主要功能是把数据库查询结果或者复杂运算的结果按照 Key-Value 这样的方式存储到对象里面,WordPress 还支持按照 Group 来划分和避免缓存的内容冲突。

下次进行同样操作的时候,可以让直接从这个对象中取出数据,不用重复到数据库中或者其他外部网站获取数据。

WordPress 对象缓存和服务器设置关系很大,如果系统开启了 Memcached 内存缓存,则这个对象是直接存入到内存,在数据未过期之前,以后再次读取这个数据都是直接从内存中读取的,这样效率和速度都非常快的。

如果服务器不支持内存缓存的话,则只能保证在当前页面(PHP同个进程下)下同样的查询或者操作不再重复从数据库中读取了。

WordPress 对象缓存的函数

WordPress 对象缓存技术使用是非常简单的,主要要熟悉下面四个函数:

这四个函数会涉及到的四个参数:

参数 解释
$key 对象的 key。
$data 要存的值。
$group 分组,可选参数,用来把缓存对象就行分组。
$expire 过期时间,可选参数,如果是默认缓存,这个参数没用,如果是内存缓存,是设置缓存的时间,单位是秒,默认为0(0的意思就是永远,不会自动过期)。

使用 WordPress 对象缓存

以 WordPress 相关文章为例,使用 WordPress 对象缓存:

使用当前 post_id 作为 key,posts_group 作为 group,缓存时间为一个小时,即 3600 秒。

global $post;
$post = get_posts($post->ID);
wp_cache_set($post->ID,$post,'posts_group',3600);

上面只是把数据存到缓存对象中,在显示文章相关内容的时候,就要去调用这个对象缓存来使用,首先检查下是否已经有了缓存,如果你要的信息没有在缓存中,或者已经过期了。wp_cache_get() 会返回 false,如果这样,你就要去数据库中重新获取这些信息。否则就返回在缓存中的信息。

global $post;
$post = wp_cache_get($post->ID,'posts_group');
if(false === $post){
$post = get_posts($post->ID);
wp_cache_set($post->ID,$post,'posts_group',3600);
}
echo $post;

因为设置了一个小时,相关文章的数据就失效,这里一般就无需更新缓存了,如果你在后台更改了设置,需要立即清理缓存,可以使用 wp_cache_delete 进行清理:

wp_cacache_delete($post->ID,'posts_group');

 

 

鲍成龙

简介

根据 key 和 group 删除缓存。

用法

<?php wp_cache_delete($key, $group = ''); ?>

参数

$key
(int|string) (required) 数据在缓存中的名字
Default: 无

$group
(string) (optional) 数据在缓存中的组名。
Default: 'default'

返回值

(bool)
删除成功返回 true,否则返回 false。

注解

  • 使用到 wp_object_cache 对象缓存的类
  • WP_Object_Cache::delete()
鲍成龙

简介

通过 cache key 和 group 获取缓存的内容。

用法

<?php wp_cache_get( $key, $group = '', $force = false, &$found = null ); ?>

参数

$key
(int|string) (required) 数据在缓存中的名字
Default: 无

$group
(string) (optional) 数据在缓存中的组名。
Default: 'default'

$force
(bool) (optional) 是否强制使用持久缓存更新本地缓存。
Default:false

$found
(bool) (optional) 是否在缓存中找到 key,可以用于消除返回 false 的歧义。目前 memecache 不支持,这个参数。
Default:false

返回值

(bool|mixed)
如果没有缓存或者缓存的数据过期,返回 false,否则返回数据。

注解

  • 使用到 wp_object_cache 对象缓存的类
  • WP_Object_Cache::get()
鲍成龙

简介

将数据存到缓存中。

用法

<?php wp_cache_set($key, $data, $group = '', $expire = 0); ?>

参数

<int|string>$key
(string) (required) cache key,用来以后获取缓存的数据
Default: 无</int|string>

$data
(mixed) (required) 要缓存的数据。
Default: 无

$group
(string) (optional) 缓存添加到的组。
Default: 'default'

$expire
(int) (optional) 要缓存的时间。
Default: 0,如果内存缓存,0为永久的意思。

返回值

(bool)
永远返回 true。

注解

  • 使用到 wp_object_cache 对象缓存的类
  • WP_Object_Cache::set()
鲍成龙

简介

如果 cache key 不存在,就添加数据到缓存中。

用法

<?php wp_cache_add($key, $data, $group = '', $expire = 0); ?>

参数

$key
(int|string) (required) cache key,用来以后获取缓存的数据
Default: 无

$data
(mixed) (required) 要缓存的数据。
Default: 无

$group
(string) (optional) 缓存添加到的组。
Default: 'default'

$expire
(int) (optional) 要缓存的时间。
Default: 0,如果内存缓存,0为永久的意思。

返回值

(bool)
如果 cache key 已经存在,返回 false,否则返回 true。

注解

  • 使用到 wp_object_cache 对象缓存的类
  • WP_Object_Cache::add()
鲍成龙
#!/bin/bash
echo "================================================================"
#输出当前时间
date --date='0 days ago' "+%Y-%m-%d %H:%M:%S"
echo "------开始------"
#判断宝塔WebHook参数是否存在
if [ ! -n "$1" ];
then
	echo "param参数错误"
	echo "------结束------"
	exit
fi
#git项目路径($1是param后面的参数,指向你的服务器的目录)
gitPath="/www/wwwroot/$1"
#git 网址 (替换成你的git地址)
gitHttp="https://github.com/xxx/$1.git"
echo "Web站点路径:$gitPath"

#判断项目路径是否存在
if [ -d "$gitPath" ]; then
	cd $gitPath
	#判断是否存在git目录
	if [ ! -d ".git" ]; then
	echo "在该目录下克隆 git"
	echo "git clone $gitHttp gittemp"
	sudo git clone $gitHttp gittemp
	sudo mv gittemp/.git .
	sudo rm -rf gittemp
	fi
	#拉取最新的项目文件
	echo "拉取最新项目文件"
	#git reset --hard origin/master
	sudo git pull $gitHttp 2>&1
	#设置目录权限
	sudo chown -R www:www $gitPath
	echo "------结束------"
	exit
else
	echo "该项目路径不存在"
	echo "------结束------"
	exit
fi
鲍成龙

CSS的border-radius属性用来设置这种圆角样式

/* 在CSS中设置内圆角 */
border-radius: 10px;

上面的代码中,10px代表了圆角的半径大小。

/* 在CSS中设置外圆角 */
border-radius: 10px / 20px;

上面的代码中,10px代表水平方向上的圆角半径,20px代表垂直方向上的圆角半径。

鲍成龙
$arr= array(
'name' => 1,
'value' => 'abcdefghijk'
);
update_option('test', $arr);

在数据库中,值变成如下内容:

其中:

a代表array

i 代表integer

s 代表string

数字代表长度

a:2:{s:4:"name";i:1;s:5:"value";s:11:"abcdefghijk";}

 

如果在数据库直接修改,还需要修改对应的长度

 

鲍成龙
// 匹配加载 选择器
var el = document.querySelector('.class');

// 建立观察者
var ob = new IntersectionObserver(function(entries){
	var entry = entries[0];

	// isIntersecting 为true 为进入,false为离开
	if(entry.isIntersecting) {

		// 进入视窗重叠 执行加载
		// console.log('执行加载');
	}
	
},{
	// 1 视窗重叠 0 视窗不重叠
	thresholds: 1
});

// 观察
ob.observe(el);

1、首先,通过document.querySelector('.class')方法选择了一个具有.class类名的元素,并将它赋值给变量el

2、接着,创建了一个IntersectionObserver对象,并传入一个回调函数作为参数。这个回调函数将在观察的元素进入或离开视窗时被调用。

3、在回调函数中,通过entries参数获取了观察元素的相关信息。在这里,我们只获取了第一个entry

4、使用entry.isIntersecting属性来判断观察元素是否进入视窗。如果isIntersectingtrue,表示元素进入了视窗,我们可以在接下来的代码中执行相应的加载操作。

5、在观察者对象的配置选项中,我们设置了thresholds为1,表示只要有1像素的元素进入视窗,就会触发回调函数。

6、最后,调用ob.observe(el)方法来开始观察指定的元素el。当元素的可见性发生变化时,就会触发回调函数的执行。

鲍成龙
参数 数据类型 是否必需 描述 默认值
$key 字符串|数组 需要移除的查询键
$query 布尔值|字符串 留空时使用当前 URL false

返回值

返回值为新的 URL 字符串

使用示例

假设当前页面的 URL 为:http://www.example.com/client/?details=value1&type=value2&date=value3

// 下面的示例输出 '/client/?type=value2&date=value3' 
echo esc_url( remove_query_arg( 'details' ) ); 
 
// 下面的示例输出 '/client/' 
$arr_params = array( 'details', 'type', 'date'); 
echo esc_url( remove_query_arg( $arr_params ) );

当我们需要操作的 URL 不是当前页面时,需要把页面 URL 添加为函数的第二个参数。

// 此示例输出 'http://www.example.com/2014/03/11/'
echo esc_url( remove_query_arg( 'details',  'http://www.example.com/2014/03/11/?details=value1' ) );
 
// 此示例输出 'http://www.example.com/2014/03/11/?type=value2&date=value3'
echo esc_url( remove_query_arg( 'details',  'http://www.example.com/2014/03/11/?details=value1&type=value2&date=value3' ) );
 
// 此示例输出 'http://www.example.com/2014/03/11/'
$arr_params = array( 'details', 'type', 'date');
echo esc_url( remove_query_arg( $arr_params, 'http://www.example.com/2014/03/11/?details=value1&type=value2&date=value3' ) );