2

WordPressインストールの高度な検索ページの一部として次のフォームを使用しています。

<form action="/advanced-search/" method="get">

フォームは正しく機能していますが、次のようなURLを生成します。

/advanced-search/page/3/?act=s&f=cichlidae&g&s&c&r&tmin&tmax&hmin&hmax&pHmin&pHmax&cmin&cmax&sF&sM&aL&aD&aH

フォームがこれらの空の変数を送信しないようにする方法はありますか?上記の例でfは、(value)のみが検索されましたcichlidae。そのため、次のようなURLを作成することをお勧めします。

/advanced-search/?act=s&f=cichlidae(さらに/page/3/必要に応じて)。

$_POSTWordPresspaged変数を値で動作させることができないため、使用できません$_POST

前もって感謝します、

4

3 に答える 3

2

jQueryのserializeメソッドを使用して、文字列内のすべてのフォーム値を収集してみませんか?

$('form').submit(function() {
   var string = $(this).serialize();
   window.location.href = '/advanced-search/'+string;
});

すべてのフォーム要素をループし、それらの値を収集して、URLで使用するための読み取り可能な文字列形式に変換します。

于 2012-04-08T21:17:33.807 に答える
1

フォームに組み込まれていません。いいえ-フィールドが存在する場合は、送信されます。

代わりにJavascriptを使用してフォームを送信し、空のフィールドを省略することができます。

于 2012-04-08T21:15:00.693 に答える
1

いいえ、方法はありません(JavaScriptがなければ)。フォームデータをどのように処理するかを決定するのはブラウザであるため、存在する場合、これはブラウザ固有になります。

また、これ:

foo.php?a=

...この:

foo.php

...意味的に異なります。前者でaは、は空の文字列("")で渡されますが、後者でaは、まったく渡されません(null)。

また、フォームは検索フォームであるため、Wordpressはここで正しいです。したがって、データを取得GETしており、;を使用する必要があります。必要に応じてデータを作成POSTしません。

これを(JavaScriptなしで)変更する方法は、URLから空のパラメーターを削除してリダイレクトするゲートウェイスクリプトを使用することです。

例:

$newGET = array();
foreach ($_GET as $key => $value) {
    if ($value !== '') $newGET[$key] = $value;
}

header('Location: some/url?'.http_build_query($newGET));
exit;
于 2012-04-08T21:17:21.137 に答える