九月
14

wordpress 搜索自定义字段(模糊查询)

如果有关注我博客人,应该会发现最近一周之内博客都一直打不开。我一直以为是主机问题,今天联系了客服,才发现原来是我自己的主题的问题。所以今天花了大半天的时间一点点排除问题,最后发现原来是和gravatar的服务器被墙有关。去掉了头像缓存,问题就解决了。

当然,不会白白更新一篇博客的。下面说一个根据自定义字段查询文章的方法。

query_posts可以实现多种组合查询,但是我遇到的一个问题是,需要搜索自定义字段的值。比如为一个post定义了一个字段“my_address”,它的值表示一个地址,比如“中国 北京 海淀区 北四环路”。如果我们要想通过搜索“北京”这个关键词来找到这篇post,那么通过query_posts就办不到了。

虽然query_posts的查询有“meta_value”这个方法,但是这个必须是完整的值,也就是只有查询“中国 北京 海淀区 北四环路”这个长关键句才能找到文章,而只通过“北京”是会查询失败的。也就是说meta_value是精确查询的,而不能模糊查询。

最后,我琢磨了两种方法,虽然我自己都感觉并不怎么完美。

方法一,通过add_filter处理posts_join、posts_search勾子

add_filter( 'posts_search', 'wp_custom_search' );
function wp_custom_search($search){
    if(!isset($_GET['meta_search']))return $search;//通过$_GET['meta_search']确保是要进行meta查询
    $s=get_query_var('s');
    $search = "AND (((wp_posts.post_title LIKE '%{$s}%') 
                OR (wp_posts.post_content LIKE '%{$s}%') 
                OR (wp_postmeta.meta_value LIKE '%{$s}%')
               )) AND (wp_posts.post_password = '')";
    return $search;
}
add_filter( 'posts_join', 'wp_custom_search_join' );
function wp_custom_search_join($join){
    if(!isset($_GET['meta_search']))return $join;
    $join = "INNER JOIN wp_postmeta ON (wp_posts.ID = wp_postmeta.post_id)";
    return $join;
}

为了不影响其它地方的query,所以我们通过检查是否有一个get请求meta_search,来判断是否要对查询进行处理。

方法二,将字段信息加入到post_content中

因为默认的post_title和post_content里的内容是模糊查询的,所以我们可以将postmeta的内容追加到post_content中。手动添加可以,自动加入也行。

下面是自动加入的方法:

add_action('wp_insert_post_data','wp_my_post',10,2);
function wp_my_post($data, $postarr){
    $arrmeta=array('my_address','meta2','meta3');
    $info='<span style="display:none;color:#fff;">';
    foreach($arrmeta as $meta){
        $info .= ' '.$_POST[$meta];
    }
    $info.='</span>';
    $data['post_content'] .= $info;
    return $data;
}

仅供参考。

如果你还有更好的方法,欢迎与我交流分享。

rrr

本文标签: , , , ,

分享

本文短网址: http://qiqi.boy.im/f7

这篇文章已经有 21 条评论

Comments (21) Trackbacks (0)
You can leave a response or Trackback this entry .
  1. liuqiqi -#1

    美美的沙发。。。 :smile:

  2. IM路人 -#2

    做个板凳吧,哈哈~~~~

  3. 丕子 -#3

    好久没来

  4. yetone -#4

    我来喽,哈哈

  5. Ray Chow -#5

    果然遇到了gravatar被墙缓存时网页打不开的情况了=。=
    我去年就写了关于这个问题的文章 :sad:

  6. 软件风暴 -#6

    赶紧试试去 真不错

  7. wmtimes -#7

    模糊查询啊。主题完成了再试。

  8. 宝宝健康成长 -#8

    新的theme很给力啊!

  9. beyondme -#9

    “Fuck you! Ni Ma Bi!” 这什么意思,网站不能留言了?

  10. 胡实 -#10

    挖宝中 你懂得

  11. joysk -#11

    啊哈,头像还在的啊?

  12. citier -#12

    Q大求救,wordpress多关键字分类筛选怎么做,有点类似你这个,纠结中

  13. beibei -#13

    还是不会使用,我想在搜索中含自定义字段!

  14. 小红帽 -#14

    感谢分享啦!~~ 虽然我没有用这个主题,也没有类似的问题 不过下次遇上了就当捡个现成了 :grin:

  1. No trackbacks yet.

Leave a Reply

Hi , say something.

  • :?:
  • :razz:
  • :sad:
  • :evil:
  • :!:
  • :smile:
  • :oops:
  • :grin:
  • :eek:
  • :shock:
  • :???:
  • :cool:
  • :lol:
  • :mad:
  • :twisted:
  • :roll:
  • :wink:
  • :idea:
  • :arrow:
  • :neutral:
  • :cry:
  • :mrgreen: