web-dev-qa-db-ja.com

管理プラグインページ内で$ _GETリクエストをトリガーする方法

私は私のプラグイン関数にこのフォームを持っています:

<form method="get" action="" enctype="multipart/form-data">
  <p class="submit">
    <input type="hidden" name="do_it_hidden" value="run">
    <input name="do_it" type="submit" class="button-primary" value="DO IT!"> 
  </p>
</form>

そして私のコードの前の方にあるこのphp条件:

if (isset($_GET['do_it_hidden'])) {
   // some code to execute here
} else {
   // just show the form
   <form method="get" action="" enctype="multipart/form-data">
     <p class="submit">
       <input type="hidden" name="do_it_hidden" value="run">
       <input name="do_it" type="submit" class="button-primary" value="DO IT!"> 
     </p>
   </form>
}

しかし、ボタンをクリックした後、私はwp-admin/options-general.php?do_it_hidden=run&do_it=DO+ITにリダイレクトされますが、これは私がやりたいことではありません。

クリックした後、私はただページをリロードして、取得条件がtrueかどうかを確認したいです。

どうやってするか?

編集:

問題は、ボタンをクリックした後、まったく別のページにリダイレクトされることです。私のプラグインはここにあります:options-general.php?page=DD_Awesome_Plugin/DD_awesome_plugin.phpしかしボタンをクリックするとここに私を投げます:options-general.php?do_it_hidden=run&do_it=DO+IT

1
Derfder

これはうまくいくはずです

if (isset($_GET['action']) && 'do_it_hidden' == $_GET['action'] ) {
   // some code to execute here
} else {
   // just show the form
   <form method="get" action="options-general.php">
     <p class="submit">
       <input type="hidden" name="action" value="do_it_hidden">
       <input type="hidden" name="page" value="<?php echo wp_unslash( $_REQUEST['page'] ); ?>">
       <input name="do_it" type="submit" class="button-primary" value="DO IT!"> 
     </p>
   </form>
}
1
Shazzad

解決しよう!GETがまったく機能していないことがわかりました。あなたはPOSTを使う必要があり、フォームアクションでこれをタイプする必要があります:

action="<?php admin_url('options-general.php?page=DD_Awesome_Plugin/DD_awesome_plugin.php'); ?>"

くそー! WP;)で簡単な作業をするのは難しいこともあります。

1
Derfder

フォームハンドラでリダイレクトを使用します。

if (isset($_GET['do_it_hidden'])) {
    // some code to execute here

    wp_redirect( admin_url( "options-general.php" ), 303 );
    exit;
}

その後、ユーザーはきれいなURLにリダイレクトされ、短いURLの変更にはほとんど気付きません。 URLの変更を完全に回避するには、POSTリクエストを使用します。

0
fuxia
<form method="get" action="do_it.php" enctype="multipart/form-data">

フォームのアクション部分には、その隠しフォーム変数の処理を担当するphpファイルを含める必要があります。フォームが送信されると、その情報が指定したファイルに渡されます。空白のままにすると、現在表示しているページにポストバックされます。

例えば、一般的なオプションのフォームは管理者のoptions.phpに送られます。

<form method="post" action="options.php" enctype="multipart/form-data">

そのファイルを使用して投稿情報を処理し、ユーザーを表示ページにリダイレクトします。

wp_redirect( admin_url( 'options-general.php?updated=true' ) );
0
meekbot
if (isset($_GET['do_it']) && $_GET['action'] =='do_it_hidden') {
   // some code to execute here
} else {
   // just show the form
   <form method="get" action="general.php?page=<?php echo $_REQUEST['page']?>" enctype="multipart/form-data">
     <p class="submit">
       <input type="hidden" action="do_it_hidden" value="run">
       <input name="do_it" type="submit" class="button-primary" value="DO IT!"> 
     </p>
   </form>
}
0
codepixlabs