搜索 WordPress 自定义字段文章

2017年12月7日 1539点热度 0人点赞 0条评论

WordPress Rest API

WordPress 默认的搜索功能搜索的是文章的标题和内容,在做网站开发的时候,我们可能需要根据内容的某个属性去搜索相应的记录,这时候用 WordPress 默认的搜索功能肯定是会有问题的,我们就需要通过自定义查询的方法来实现这个功能了,来看一下具体步骤。

建立自定义查询表单

这一步是最简单的,不涉及 PHP,直接用 HTML 写一个表单即可。


<form class="pure-form" role="search" method="get" id="searchform" action="http://www.yousite.com/phonesearch/">
    <input type="text" name="phone" id="s" class="pure-input-1-2" placeholder="输入电话号码" value="输入电话号码">
    <button type="submit" class="pure-button pure-button-primary">查询</button>
</form>

添加自定义查询参数

因为 WordPress 的公共查询参数里面没有自定义字段,我们需要添加一个自定义查询参数,这样我们就可以通过这个自定义查询参数来传递需要查询的数据了。


add_filter( 'query_vars', 'add_query_vars_filter' );
function add_query_vars_filter( $vars ) {
	$vars[] = "phone";
	return $vars;
}

需要注意的是,自定义查询参数不能是 WordPress 内置查询参数中的任何一个,否则会引起冲突。

获取自定义查询参数

获取自定义查询参数的方法和获取内置查询参数的方法是一样的,都是通过 `get_query_var` 函数。


$phone = get_query_var('phone') ? get_query_var('phone) : '';
## 构建查询参数,新建查询

获取了自定义查询参数,我们就可以通过 WordPress 的 meta 参数查询相应的文章了。


$args = array(
    'meta_key' => 'phone'
	'meta_value' => $phone,
);
$wp_query = new WP_Query($args);

输出自定义查询结果

这一步就是循环输出查询到的数据的过程,和普通的文章输出没有实质的区别。


while ($wp_query->have_posts()) : $wp_query->the_post();
	get_template_part('content', 'stars');
endwhile;

这种方法是通过搜索进行的,其实还可以通过直接给链接加参数的方法实现多条件过滤,具体方法后续会有文章说明,请关注。来源:WordPress智库

Rest API 输出


register_meta( 'post', 'my_meta_key', null, 'my_validation_callback' );
function my_validation_callback( $allowed, $key, $post_id, $user_id, $cap, $caps ) {
    switch ( $cap ) {
        case 'read_post_meta':
        case 'update_post_meta':
        case 'add_post_meta':
        case 'delete_post_meta':
            return true;

        default:
            return false;
    }
}

add_filter( 'rest_public_meta_keys', function ( $keys ) {
    $keys[] = 'my_meta_key';
    return $keys;
} );

WPTalk

这个人很懒,什么都没留下