如何在wordpress中创建自定义字段搜索
我需要为我的wp网站创建自定义高级搜索。我必须在cpt(search home.php)中显示搜索结果。我的表单有很多包含不同元值的字段。 我知道我必须使用如何在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(
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查询中使用元查询。不需要预先发邮件,都一样,谢谢你抽出时间。祝您有个美好的一天