0

だから私は、カテゴリ用の1つのプルダウンメニューとタグとしてのチェックボックスの4つの列を持つ単純な外部ポップアップを作成しようとしています. (これはワードプレスの検索エンジンプラグインにフィードするためのものです)

これには通常のフォーム送信を使用しますが、最終的な URL は次のようになります。

Site.com/?category_name=VALUE&tag=TAG1&tag=TAG2&tag=TAG3

しかし、私は自分のURLを次のようにしたい:

Site.com/?category_name=VALUE&tag=tag1+tag2+tag3

これを達成するために誰かが私を正しい方向に向けることができますか?

CATEGORY_NAMEは特定の WordPress カテゴリを検索するためのもので、TAGSは通常の投稿タグです。

4

2 に答える 2

0

チェックボックスではそれを行うことはできません。これは、チェックボックスが機能する方法ではありません。本当に、それは選択ではありません。これは、HTML、PHP、およびブラウザーの構築方法です。

さらに、あなたがしたことはうまくいきません。同じ変数をいくつかの異なるフィールドに設定しました。を設定するたびに、前の値を上書きします。?category_name=VALUE&tag=TAG1&tag=TAG2&tag=TAG3あなたのURLはあなたがあなたのスクリプトに追加した場合のように見えるかもしれませんが、あなたvar_dump($_GET);はPHPが見る唯一のものが最後のものであることがわかるでしょう- tag=TAG3

[]チェックボックス名に角かっこを使用すると、コードを機能させることができます。非常に最小限のコードの例(デモンストレーションのみ):

echo '<form>';
 echo '<input type="checkbox" name="tag[]" value="tag1">';
 echo '<input type="checkbox" name="tag[]" value="tag2">';
 echo '<input type="checkbox" name="tag[]" value="tag3">';
 echo '<input type="checkbox" name="tag[]" value="tag4">';
 echo '<input type="checkbox" name="tag[]" value="tag5">';
 echo '<input type="checkbox" name="tag[]" value="tag6">';
 echo '<input type="submit" value="Clickie">';
echo '</form>';

ただし、URLの「タグ」部分は次のようになります。

&tag[]=tag1&tag[]=tag4&tag[]=tag6

これがチェックボックスの仕組みです。私が考えることができる2つの回避策があります。

1つ目は、Javascriptを使用して、フォームの非表示フィールドにデータを入力することです。

echo '<form>';
 echo '<input type="hidden" name="tag" value="">';
 echo '<input type="checkbox" value="tag1">';
 echo '<input type="checkbox" value="tag2">';
 echo '<input type="checkbox" value="tag3">';
 echo '<input type="checkbox" value="tag4">';
 echo '<input type="checkbox" value="tag5">';
 echo '<input type="checkbox" value="tag6">';
 echo '<input type="submit" value="Clickie">';
echo '</form>';

Javascriptでこれらのチェックボックスのクリックを監視し、非表示のタグフィールドに値を入力します。必要なURLを取得するには、チェックボックスからを削除する必要がnameあります。これにより、このフォームは完全にJavascriptに依存します。Javascriptがないと機能しません。その悪いデザインだと思います。

もう1つのオプションは、URLの書き換えを試みるために使用することですが、正直なところ、それを機能させるために必要な複雑な正規表現が可能mod_rewriteかどうかはわかりません。mod_rewrite

努力する価値も価格も回避策はないと思います。角かっこを使用して、受信側で配列を処理することをお勧めします。言い換えれば、もしあなたが持っているなら&tag[]=tag1&tag[]=tag4&tag[]=tag6、これはあなたがあなたのURLに望むような文字列を得るでしょう:

if (isset($_GET['tag'])) {
  $tstr = implode('+',$_GET['tag']);
}
echo $tstr;

そのために使用しているものは何でも、検索機能でそれを使用できます。

于 2013-02-11T15:40:48.753 に答える
0

これが私がしたことです。ワードプレスに関数を追加する代わりに(より深くテストすると予期しないエラーが発生していました)、さらに送信する前にURLをキャッチするPHPを作成しました。

これはどのように見えるかです:

    <?php

if (isset($_GET['tag'])) {
  $tstr = implode('+',$_GET['tag']);
}

$cat = ($_GET['category_name']);

header("Location: http://url.com/?category_name=$cat&tag=$tstr");

?> 


I don't know if this is correct or secure, but it works :D
Thanks for your help !
于 2013-02-12T09:16:50.037 に答える