私はワードプレスのウェブサイトを持っています。投稿を並べ替え/フィルタリングするためのフォームが記載されたカテゴリページがあります。
投稿を表示するためにフォームのコンテンツを取得する必要があるため、フォームアクションとして$ _SERVER ['PHP_SELF']を使用しようとしましたが、実行するとインデックスページにリダイレクトされます。
これには理由がありますか?または、ワードプレス内でフォームを送信するためのより良い方法。
ありがとう
この理由は、Wordpressが(ほぼ)すべてをindex.phpページで実行し、ルーティングロジックを介して表示するページを処理するためです。var_dump($_SERVER);
あなたはあなたが望む値を見るためにやってみるかもしれませんが、それはおそらく$_SERVER['REQUEST_URI']
です。
現在のページのパーマリンクをエコーするthe_permalink()ワードプレス関数を使用できます。
WordPressは素敵なURLを使用しているので、使用するものはインデックスにリダイレクトされると思います。
以下の関数を使用して、現在のページの完全なURLを「取得」できます。
function selfURL()
{
$ret = substr( strtolower($_SERVER['SERVER_PROTOCOL']), 0, strpos( strtolower($_SERVER['SERVER_PROTOCOL']), "/") ); // Add protocol (like HTTP)
$ret .= ( empty($_SERVER['HTTPS']) ? NULL : ( ($_SERVER['HTTPS'] == "on") ? "s" : NULL) ); // Add 's' if protocol is secure HTTPS
$ret .= "://" . $_SERVER['SERVER_NAME']; // Add domain name/IP address
$ret .= ( $_SERVER['SERVER_PORT'] == 80 ? "" : ":".$_SERVER['SERVER_PORT'] ); // Add port directive if port is not 80 (default www port)
$ret .= $_SERVER['REQUEST_URI']; // Add the rest of the URL
return $ret; // Return the value
}
明らかに、フォーム<form method="GET" action="<?php echo selfURL(); ?>">
のを動的に設定するにはを使用する必要があります。action
あなたはhtmlアクションで間違ったことをしています。
getをformメソッドとして使用すると、以前の値がURLから消えることに注意してください。
したがって、以前の値を保持するには、クエリ文字列に存在する値ごとに非表示の入力を設定する必要があります。
これらの値を取得するこの例を参照してください。
<?php $exclude_values = array('to_date','from_date');
foreach($_GET as $key => $value){
if(!in_array($key,$exclude_values)){?>
<input type="hidden" name="<?php echo $key;?>" value="<?php echo $value;?>"/>
<?php }
}
?>
最近はワードプレスのテーマにも取り組んでいます。
だから、私はずっと前にこの問題を経験していたので、この答えは完全に正しいです。
注意:$exclude_values
フォームフィールドにすでに存在するキーと、フォームの送信後に不要なキーを追加してください。
そしてもう1つselfURL
、アクションフィールドの関数を使用します