2024年4月18日发(作者:)
发表于周三,5:11下午作者:QiQiBoY分类:PHP,WordPress
如果有关注我博客人,应该会发现最近一周之内博客都一直打不开。我一直以为是主机问题,今天联系了
客服,才发现原来是我自己的主题的问题。所以今天花了大半天的时间一点点排除问题,最后发现原来是
和gravatar的服务器被墙有关。去掉了头像缓存,问题就解决了。
当然,不会白白更新一篇博客的。下面说一个根据自定义字段查询文章的方法。
query_posts可以实现多种组合查询,但是我遇到的一个问题是,需要搜索自定义字段的值。比如为一个
post定义了一个字段“my_address”,它的值表示一个地址,比如“中国北京海淀区北四环路”。如果
我们要想通过搜索“北京”这个关键词来找到这篇post,那么通过query_posts就办不到了。
虽然query_posts的查询有
“
meta_value
”
这个方法,但是这个必须是完整的值,也就是只有查询
“
中国北
京海淀区北四环路
”
这个长关键句才能找到文章,而只通过
“
北京
”
是会查询失败的。也就是说
meta_value是精确查询的,而不能模糊查询。
最后,我琢磨了两种方法,虽然我自己都感觉并不怎么完美。
add_filter('posts_search','wp_custom_search');
functionwp_custom_search($search){
if(!isset($_GET['meta_search']))return$search;//通过$_GET['meta_search']确保是要进行
meta查询
$s=get_query_var('s');
$search="AND(((wp__titleLIKE'%{$s}%')
OR(wp__contentLIKE'%{$s}%')
OR(wp__valueLIKE'%{$s}%')
))AND(wp__password='')";
return$search;
}
add_filter('posts_join','wp_custom_search_join');
functionwp_custom_search_join($join){
if(!isset($_GET['meta_search']))return$join;
$join="INNERJOINwp_postmetaON(wp_=wp__id)";
return$join;
}
为了不影响其它地方的query,所以我们通过检查是否有一个get请求meta_search,来判断是否要对
查询进行处理。
因为默认的post_title和post_content里的内容是模糊查询的,所以我们可以将postmeta的内容追加
到post_content中。手动添加可以,自动加入也行。
下面是自动加入的方法:
add_action('wp_insert_post_data','wp_my_post',10,2);
functionwp_my_post($data,$postarr){
$arrmeta=array('my_address','meta2','meta3');
$info='
foreach($arrmetaas$meta){
$info.=''.$_POST[$meta];
}
$info.='';
$data['post_content'].=$info;
return$data;
}
仅供参考。
如果你还有更好的方法,欢迎与我交流分享。


发布评论