wake-up-neo.com

Entfernen Sie den für die Abfragezeichenfolge spezifischen Schlüsselwert

Ich füge mehrere Werte desselben Schlüssels als Abfragezeichenfolge mit der Funktion add_query_arg hinzu, um Produkte zu filtern.

Das Problem ist, dass ich nur den Wert des geklickten Links anstelle des gesamten Key-Arrays entfernen möchte.

Zum Beispiel, wenn ich auf diese 2 Links klicke:

Die URL wird so aussehen:

Aber wenn ich erneut auf einen dieser Links klicke, wird die Abfragezeichenfolge vollständig entfernt, anstatt nur den angeklickten Wert zu entfernen.

  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
Gabriel Souza

[EDIT] Dies sollte so funktionieren, wie Sie es wollten:

  $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.
2
Sally CJ