wordpress自定义搜索

wordpress自定义搜索默认下,wordpress的搜索范围只有文章的标题和文章内容,无法搜索自定义字段中的内容,现实情况是很多情况下我们可能会要搜索自定义字段中的内容。如果只是想搜索一到两个自定义字段中的内容,可以使用wordpress的内置函数meta_query变量。12345678910111213141516171

大家好,又见面了,我是你们的朋友全栈君。

默认下,wordpress的搜索范围只有文章的标题和文章内容,无法搜索自定义字段中的内容,现实情况是很多情况下我们可能会要搜索自定义字段中的内容。

如果只是想搜索一到两个自定义字段中的内容,可以使用wordpress的内置函数 meta_query变量。

<!– 代码 –>

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

// Query arguments

$args = array(

    ‘post_type’ => ‘post’,

    ‘post_status’ => ‘publish’,

);

$args[‘meta_query’][] =array(

    ‘key’ => ‘city’,

    ‘value’ => $city,

    ‘compare’ => ‘LIKE’,

);

$args[‘meta_query’][] =array(

    ‘key’ => ‘state’,

    ‘value’ => $state,

    ‘compare’ => ‘LIKE’,

);

$query = new WP_Query($args );

if ( $query->have_posts() ):while ( $query->have_posts() ) :$query->the_post();

// Do loop here

endwhile; endif;

这个方法并不适合于搜索更多及至全部的自定义字段,因为如果你有很多个自定义字段,这上请求将会变得非常的庞大,wordpress执行起来也同样的要花很多时间。根据我的测试,10个自定义字段,就花了超过1分钟的时间还没有搜索得结果。

所以,我写了一个解决方案,不使用meta_query写复杂的请求,而是使用简单的SQL语句,查询出所有的必须的post_id,于是一切就直接了当了:

<!– 代码二 –>

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

global $wpdb;

// 如果你使用自定义搜索框

// $keyword = sanitize_text_field( $_POST[‘keyword’] );

//如果你使用wordpress默认搜索框

 

$keyword = get_search_query();

$keyword = “%{$keyword}%”;

// 搜索所有的自定义字段

$post_ids_meta = $wpdb->get_col($wpdb->prepare( “

    SELECT DISTINCT post_id FROM {
$wpdb->postmeta}

    WHERE meta_value LIKE ‘%s’

“, $keyword ) );

// 在文章标题或文章内容中搜索

$post_ids_post = $wpdb->get_col($wpdb->prepare( “

    SELECT DISTINCT ID FROM {
$wpdb->posts}

    WHERE post_title LIKE ‘%s’

    OR post_content LIKE ‘%s’

“, $keyword, $keyword ) );

$post_ids = array_merge($post_ids_meta, $post_ids_post );

// 查询参数

$args = array(

    ‘post_type’   => ‘post’,

    ‘post_status’ => ‘publish’,

    ‘post__in’    => $post_ids,

);

$query = new WP_Query($args );

if ( $query->have_posts() ):while ( $query->have_posts() ) :$query->the_post();

// Do loop here

endwhile; endif;

在上面的代码中,做了自定义搜索框的查询和wrodpress默认搜索框两种方式,可以根据需要注释掉其中一个。

上面的代码中,搜索了所有文章自定义字段,文章标题,文章内容,返回是符合的文章的ID组成的数组。然后再使用wp_query做了一个自定义查询,使用这个方法,可以很方便地使用模板标签把文章内容显示出来。

你可以把代码放到主题文章中的search.php文章中,去替换wordpress默认的搜索框。你也可以把这代码粘贴到一个自定义搜索框中。

参考资料:http://www.deluxeblogtips.com/2012/04/search-all-custom-fields.html

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/159159.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • linux下安装tomcat的默认目录[通俗易懂]

    linux下安装tomcat的默认目录[通俗易懂]以Linux分支UbuntuServer为例。一、相关目录及作用说明  /etc/tomcat6-全局配置  /usr/share/tomcat6/-程序主目录  /usr/share/tomcat6/conf/Catalina/localhost/-本机部署的Catalina配置  /var/lib/tomcat6/-工作主目录  /var/l

    2022年5月5日
    212
  • java中=是啥意思?

    “=”表示赋值,是一个赋值运算符,可以将一个值赋给一个变量,如int a = 10;把字面量10赋值给整形变量a。

    2022年1月16日
    69
  • Python爬虫_宅男福利?妹纸勿点__一蓑烟雨任平生「建议收藏」

    Python爬虫_宅男福利?妹纸勿点__一蓑烟雨任平生「建议收藏」咳咳直接上代码#!/usr/bin/envpython#-*-coding:utf-8-*-#@Time:2020/12/1519:10#@Author:huni#@File:图库大全1000.py#@Software:PyCharmimportrequestsfromlxmlimportetreeimportosif__name__==’__main__’:headers={‘User-A

    2025年11月13日
    3
  • windows安装深度linux,最漂亮的国产Linux,windows下安装深度操作系统步骤

    windows安装深度linux,最漂亮的国产Linux,windows下安装深度操作系统步骤GIF国产操作系统都是基于Linux进行的二次开发,有很多国产系统只是在Linux基础上进行一些美化、内置几个软件就号称自己是操作系统了。而为什么深度操作系统deepinLinux一直深受用户喜爱呢?虽然它也是基于Linux内核,但它的整个系统架构设计都是自己研发制作的。从显示管理器、资源管理器再到桌面环境及比较实用的深度全家桶,在这个系统上,你不仅可以Linux原生的软件,还可以使用QQ、TI…

    2022年5月13日
    66
  • Pygame安装的详细说明

    Pygame安装的详细说明Pygame的安装在未安装好pygame模块时,我们在使用pygame开发游戏就回发生Error:ModuleNotFoundError:Nomodulenamed‘pygame’此时则要安装好pygame模块才可以正常使用pygame模块进行游戏开发。下面详细讲述pygame模块的安装:1.先检查自己的python版本,我们现在用的一般是最新版,例如我下载的是python3….

    2022年5月23日
    71
  • Java优先级队列PriorityQueue「建议收藏」

    Java优先级队列PriorityQueue「建议收藏」目录普通队列对比优先级队列:逆序优先级队列自定义优先级队列的优先级相较于普通先进先出队列来说,优先级队列会根据优先级进行由高到低排序,出队时优先级高的先出队。普通队列对比优先级队列:1.普通队列:importjava.util.LinkedList;importjava.util.Queue;publicclassMainTest{publicstaticvoidmain(String[]args){ Queue<Integer>queue

    2022年9月23日
    2

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号