大家好,又见面了,我是你们的朋友全栈君。
默认下,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 { WHERE meta_value LIKE ‘%s’ “, $keyword ) ); // 在文章标题或文章内容中搜索 $post_ids_post = $wpdb->get_col($wpdb->prepare( “ SELECT DISTINCT ID FROM { 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
发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/159159.html原文链接:https://javaforall.cn
【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛
【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...