如何在Wordpress中创建自定义字段搜索

时间:2019-02-23 05:37:21

标签: wordpress

我需要为我的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来检查值。 请帮我谢谢。

1 个答案:

答案 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 );