Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/wordpress/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在wordpress中创建自定义字段搜索_Wordpress - Fatal编程技术网

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

如何在wordpress中创建自定义字段搜索,wordpress,Wordpress,我需要为我的wp网站创建自定义高级搜索。我必须在cpt(search home.php)中显示搜索结果。我的表单有很多包含不同元值的字段。 我知道我必须使用pre\u get\u posts,但我不能很好地使用它。 表单字段数据通过get方法发送,我需要使用pre_get_posts过滤wp查询,但并非所有字段都是必需的,因此它们可能不会发送 $query->set( 'meta_query', array( 'relation' => 'OR', array(

我需要为我的wp网站创建自定义高级搜索。我必须在cpt(search home.php)中显示搜索结果。我的表单有很多包含不同元值的字段。 我知道我必须使用
pre\u get\u 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
。 其次,我需要通过
$\u GET
值过滤wp查询。问题是,当url中的get方法没有发送值时(例如,family),wp query返回空值,而我需要通过退出的meta(例如name)显示post,字段数很高,因此我无法使用
isset
检查值。
请帮助我,谢谢。

听起来,如果某个字段未通过,您只想按已通过的字段进行筛选,而忽略未通过的字段,对吗?如果没有,请告诉我,我会调整我的答案

您可以处理缺少的字段,而无需在每个字段上单独设置
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 );

听起来好像如果一个字段没有被传递,你只想按传递的字段过滤,而忽略未传递的字段,对吗?如果没有,请告诉我,我会调整我的答案

您可以处理缺少的字段,而无需在每个字段上单独设置
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 );

tnxxxxx@Noah,我如何在functions.php中定义pre_get_posts操作来过滤我的cpt中的wp查询?(home search.php)这要视情况而定。你的职位怎么样?这是具有posts查询的默认WP模板吗?您使用的是简短的代码吗?简单的wp_查询类如果是这样,您可以在wp查询中使用元查询。不需要预先发邮件,都一样,谢谢你抽出时间。祝您有一个愉快的日子tnxxxxx@Noah,我如何在functions.php中定义pre_get_posts操作来过滤我的cpt中的wp查询?(home search.php)这要视情况而定。你的职位怎么样?这是具有posts查询的默认WP模板吗?您使用的是简短的代码吗?简单的wp_查询类如果是这样,您可以在wp查询中使用元查询。不需要预先发邮件,都一样,谢谢你抽出时间。祝您有个美好的一天