删除查询字符串特定的键值

时间:2018-03-18 作者:Gabriel Souza

我使用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>
  }

1 个回复
最合适的回答,由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.

结束

相关推荐

使用PHP快捷码和Java脚本从自定义插件设置中提取数据

我正在构建一个自定义插件,它只是一个基本的事件倒计时计时器。您可以输入倒计时的日期和时间,然后将快捷码粘贴到网站的页面中,以显示距事件发生的天数、小时、分钟和秒数。我使用PHP生成表单,使用JavaScript从表单中提取数据并将其呈现到页面。我在“设置”中设置了一个“预览”部分,以确保倒计时正确、数据持续等。它工作得很好(请参见屏幕截图#1)!然而,当我在外部页面上使用我的短代码[mbc\\U countdown\\U clock]时,它不会将事件日期数据拉入短代码生成的div中。我已经通过在divs中