我使用add\\u query\\u arg函数将同一关键字的多个值添加为查询字符串,以筛选产品。
问题是,我只想删除单击的链接的值,而不是整个键数组。
例如,当我单击以下两个链接时:
url如下:
但当我再次单击其中一个链接时,查询字符串将被完全删除,而不仅仅是删除单击的值。
function custom_query_vars_filter( $vars ) {
$vars[] = \'marca\';
return $vars;
}
add_filter( \'query_vars\', \'custom_query_vars_filter\' );
$marca = get_query_var(\'marca\');
$marca_arg = isset($marca) && is_array($marca)
? $marca : [];
foreach ($marcas_terms as $marca_term) {
<a href="<?php echo (in_array($marca_term->slug, $marca_arg)) ?
esc_url(remove_query_arg(\'marca\')) : esc_url(add_query_arg(\'marca[]\',
"$marca_term->slug")); ?>" <?php echo (in_array($marca_term->slug,
$marca_arg)) ? "class=\'selected\'" : \'\' ?>><?php echo $marca_term->name;
?></a>
}
最合适的回答,由SO网友:Sally CJ 整理而成
[编辑]这应该按照您希望的方式进行:
$marca = get_query_var(\'marca\');
$marca_arg = isset($marca) && is_array($marca)
? $marca : [];
$url_base = remove_query_arg( \'marca\' );
$n = count( $marca_arg );
foreach ($marcas_terms as $marca_term) {
$selected = in_array( $marca_term->slug, $marca_arg );
if ( $selected ) {
$marca_arg2 = array_diff( $marca_arg, [ $marca_term->slug ] );
// Rebuils the indexes. Just remove if not necessary.
$marca_arg3 = [];
foreach ( $marca_arg2 as $slug ) {
$marca_arg3[] = $slug;
}
$url = add_query_arg( \'marca\', $marca_arg3, $url_base );
$marca_arg2 = $marca_arg3 = null;
} else {
$url = add_query_arg( \'marca[\' . $n . \']\', $marca_term->slug );
}
?>
<a href="<?php echo esc_url( $url ); ?>" <?php echo $selected ? // wrapped
"class=\'selected\'" : \'\'; ?>><?php echo $marca_term->name; ?></a>
<?php
} // End $marcas_terms loop.