我需要为我的wp网站创建一个自定义高级搜索。我必须在cpt(search-home.php)中显示搜索结果。我的表单有很多包含不同元值的字段。
我知道我必须使用pre_get_posts
,但是我不能很好地使用它。
表单字段数据通过get方法发送,我需要使用pre_get_posts
来过滤wp查询,但并非所有字段都是必需的,因此它们可能不会发送。
$query->set( 'meta_query', array(
'relation' => 'OR',
array(
'key' => 'name',
'value' => $_GET['name']
),
array(
'key' => 'family',
'value' => $_GET['family']
)
) );
首先,我需要在CPT(search-home.php页面)中过滤pre_get_posts
。
其次,我需要通过$_GET
值来过滤wp查询。问题是,当url(例如family)中的get方法未发送值时,wp查询返回空值,而我需要按退出的meta(例如name)显示post,字段数很多,因为我不能使用isset
来检查值。
请帮我谢谢。
答案 0 :(得分:0)
听起来好像没有传递字段,您只想按传递的字段进行过滤,而忽略未传递的字段,对吗?如果没有,请告诉我,我会调整答案。
您可以在每个字段上都没有单独的isset
行的情况下解决丢失的字段。见下文:
创建一个包含所有字段名称的数组:
$field_names = array('family', 'name', 'country');
$meta_query = array('relation' => 'OR');
foreach ($field_names as $field_name) {
if (isset($_GET[$field_name])) {
$meta_query[] = array('key' => $field_name, 'value' => $_GET[$field_name]);
}
}
$args = array(
'meta_query' => $meta_query,
);
$query = new WP_Query( $args );