通过在 Wordpress 中使用两个带有查询的自定义元字段来列出用户
List users by using two custom meta fields with query in Wordpress
我正在尝试创建一个用户列表,方法是使用 3 个用户元值对其进行过滤。
首先,我创建了一个表单,其中包含两个 select 选项,这些选项具有不同的元字段可能值。然后我创建了一个过滤查询并使用了表单中的值,第一个值 ($search
) 工作得很好,但第二个不工作,我不知道为什么。
如果我替换
中的第二个值
'key' => 'distrito_profissao'
它将完美运行。
'value' => 'Leiria'
我也不明白为什么这个值 ($search2
) 在我提交时没有保存,而另一个保存了。
add_shortcode('user_search_C','My_User_search_C');
function My_User_search_C() {
?>
<?php
$search=get_query_var( 'as' );
$search2=get_query_var( 'bs' );
// Array of stdClass objects.
?>
<ul class="users_list">
<form>
<label for="as" ></label>
<select name="as" id="as" >
<option value="" <?php selected( $search, "" ); ?> ></option>
<option value="CAPDA"<?php selected( $search, "CAPDA" ); ?> >Crianças e adolescentes com perturbações do desenvolvimento e aprendizagem</option>
<option value="CMPIP"<?php selected( $search, "CMPIP" ); ?> >Crianças em meio pré-escolar e/ou Intervenção Precoce</option>
<option value="CACP"<?php selected( $search, "CACP" ); ?> >Crianças e adolescentes em contexto pedopsiquiátrico</option>
<option value="MA" <?php selected( $search, "MA" ); ?> >Meio Aquático</option>
<option value="SMAI"<?php selected( $search, "SMAI" ); ?> >Saúde mental do adulto e do idoso</option>
</select><br/>
<label for="bs"></label>
<select name="bs" id="bs" >
<option value="" <?php selected( $search2, "" ); ?>></option>
<option value="Beja" <?php selected( $search2, "Beja" ); ?> >Beja</option>
<option value="Braga" <?php selected( $search2, "Braga" ); ?> >Braga</option>
<option value="Bragança" <?php selected( $search2, "Bragança" ); ?> >Bragança</option>
<option value="Castelo Branco" <?php selected( $search2, "Castelo Branco" ); ?> >Castelo Branco</option>
<option value="Coimbra" <?php selected( $search2, "Coimbra" ); ?> >Coimbra</option>
<option value="Évora" <?php selected( $search2, "Évora" ); ?> >Évora</option>
<option value="Guarda" <?php selected( $search2, "Guarda" ); ?> >Guarda</option>
<option value="Leiria" <?php selected( $search2, "Leiria" ); ?> >Leiria</option>
<option value="Lisboa" <?php selected( $search2, "Lisboa" ); ?> >Lisboa</option>
<option value="Portalegre" <?php selected( $search2, "Portalegre" ); ?> >Portalegre</option>
<option value="Porto" <?php selected( $search2, "Porto" ); ?> >Porto</option>
<option value="Santarém" <?php selected( $search2, "Santarém" ); ?> >Santarém</option>
<option value="Setúbal" <?php selected( $search2, "Setúbal" ); ?> >Setúbal</option>
<option value="Viana do Castelo" <?php selected( $search2, "Viana do Castelo" ); ?> >Viana do Castelo</option>
<option value="Vila Real" <?php selected( $search2, "Vila Real" ); ?> >Vila Real</option>
<option value="Viseu" <?php selected( $search2, "Viseu" ); ?> >Viseu</option>
</select></br>
<input type="submit" id="submit" />
</form>
<?php
$blogusers = get_users( array('fields' => array( 'display_name'),array('meta_key' => $metakey,$metakey2),array('meta_value' => $search2,$search),'meta_query' => array(
'relation' => 'AND',
array(
'key' => 'list_prof',
'value' => 'S',
'compare' => '='
),
array('relation' => 'OR',
array(
'key' => 'distrito_profissao',
'value' => $search2,
'compare' => '='
),
array(
'key' => 'area_profissao',
'value' => $search,
'compare' => '='
)
)) ));
foreach ( $blogusers as $user ) {
echo '<li>' . esc_html( $user->display_name ) . '</li>';
}
?>
</ul>
<?php
}
两个查询变量都定义了吗?以下是我对它们的定义:
function e3_add_query_vars($vars) {
$vars[] = 'as';
$vars[] = 'bs';
return $vars;
}
add_filter( 'query_vars', 'e3_add_query_vars' );
如果您有一个已注册的分类法,它会自动注册该查询 var,从而在某些情况下不需要这样做(我的主题中有一些情况需要这个,有些情况不需要)
我正在尝试创建一个用户列表,方法是使用 3 个用户元值对其进行过滤。
首先,我创建了一个表单,其中包含两个 select 选项,这些选项具有不同的元字段可能值。然后我创建了一个过滤查询并使用了表单中的值,第一个值 ($search
) 工作得很好,但第二个不工作,我不知道为什么。
如果我替换
中的第二个值'key' => 'distrito_profissao'
它将完美运行。
'value' => 'Leiria'
我也不明白为什么这个值 ($search2
) 在我提交时没有保存,而另一个保存了。
add_shortcode('user_search_C','My_User_search_C');
function My_User_search_C() {
?>
<?php
$search=get_query_var( 'as' );
$search2=get_query_var( 'bs' );
// Array of stdClass objects.
?>
<ul class="users_list">
<form>
<label for="as" ></label>
<select name="as" id="as" >
<option value="" <?php selected( $search, "" ); ?> ></option>
<option value="CAPDA"<?php selected( $search, "CAPDA" ); ?> >Crianças e adolescentes com perturbações do desenvolvimento e aprendizagem</option>
<option value="CMPIP"<?php selected( $search, "CMPIP" ); ?> >Crianças em meio pré-escolar e/ou Intervenção Precoce</option>
<option value="CACP"<?php selected( $search, "CACP" ); ?> >Crianças e adolescentes em contexto pedopsiquiátrico</option>
<option value="MA" <?php selected( $search, "MA" ); ?> >Meio Aquático</option>
<option value="SMAI"<?php selected( $search, "SMAI" ); ?> >Saúde mental do adulto e do idoso</option>
</select><br/>
<label for="bs"></label>
<select name="bs" id="bs" >
<option value="" <?php selected( $search2, "" ); ?>></option>
<option value="Beja" <?php selected( $search2, "Beja" ); ?> >Beja</option>
<option value="Braga" <?php selected( $search2, "Braga" ); ?> >Braga</option>
<option value="Bragança" <?php selected( $search2, "Bragança" ); ?> >Bragança</option>
<option value="Castelo Branco" <?php selected( $search2, "Castelo Branco" ); ?> >Castelo Branco</option>
<option value="Coimbra" <?php selected( $search2, "Coimbra" ); ?> >Coimbra</option>
<option value="Évora" <?php selected( $search2, "Évora" ); ?> >Évora</option>
<option value="Guarda" <?php selected( $search2, "Guarda" ); ?> >Guarda</option>
<option value="Leiria" <?php selected( $search2, "Leiria" ); ?> >Leiria</option>
<option value="Lisboa" <?php selected( $search2, "Lisboa" ); ?> >Lisboa</option>
<option value="Portalegre" <?php selected( $search2, "Portalegre" ); ?> >Portalegre</option>
<option value="Porto" <?php selected( $search2, "Porto" ); ?> >Porto</option>
<option value="Santarém" <?php selected( $search2, "Santarém" ); ?> >Santarém</option>
<option value="Setúbal" <?php selected( $search2, "Setúbal" ); ?> >Setúbal</option>
<option value="Viana do Castelo" <?php selected( $search2, "Viana do Castelo" ); ?> >Viana do Castelo</option>
<option value="Vila Real" <?php selected( $search2, "Vila Real" ); ?> >Vila Real</option>
<option value="Viseu" <?php selected( $search2, "Viseu" ); ?> >Viseu</option>
</select></br>
<input type="submit" id="submit" />
</form>
<?php
$blogusers = get_users( array('fields' => array( 'display_name'),array('meta_key' => $metakey,$metakey2),array('meta_value' => $search2,$search),'meta_query' => array(
'relation' => 'AND',
array(
'key' => 'list_prof',
'value' => 'S',
'compare' => '='
),
array('relation' => 'OR',
array(
'key' => 'distrito_profissao',
'value' => $search2,
'compare' => '='
),
array(
'key' => 'area_profissao',
'value' => $search,
'compare' => '='
)
)) ));
foreach ( $blogusers as $user ) {
echo '<li>' . esc_html( $user->display_name ) . '</li>';
}
?>
</ul>
<?php
}
两个查询变量都定义了吗?以下是我对它们的定义:
function e3_add_query_vars($vars) {
$vars[] = 'as';
$vars[] = 'bs';
return $vars;
}
add_filter( 'query_vars', 'e3_add_query_vars' );
如果您有一个已注册的分类法,它会自动注册该查询 var,从而在某些情况下不需要这样做(我的主题中有一些情况需要这个,有些情况不需要)