it-swarm.dev

ヘッダーとwp_redirectが機能していません。ヘッダー情報の警告を変更できません

Header()なしでリダイレクトする別の方法を誰かが知っていますか?このエラーを私に与えますか? wp_redirectも機能しません...

これは私が得ているエラーです:

警告:ヘッダー情報は変更できません-ヘッダーは/ home/my_site/public_html/wp-content /の(/home/my_site/public_html/wp-content/themes/EHCC/page-secure.php:8で開始された出力)によってすでに送信されています8行目のthemes/my_theme/template-parts/secure-form.php

<?php
ob_start();
if (!empty($_POST['password']))
{
  $redirect = ($_POST['password']);
  $redirect = str_replace(" ","-",$redirect);
  $redirect = strtolower($redirect);
    header("Location: /bids/$redirect");
    die();
}
else
{
  print '
    <div class=\'row secureform__container\'>
        <form id=\'securedownloads\' class=\'secureform\' method=\'post\' action=\'\'>
            <fieldset class=\'secureform__inner\'>
                <label for=\'password\' class=\'secureform__label\'>Password:</label>
                <input id=\'password\' type=\'text\' name=\'password\' maxlength=\'40\' class=\'secureform__input\'>
                <input type=\'submit\' value=\'login\' class=\'secureform__submit\'>
                <input type=\'hidden\' name=\'next\' value=\'\'>
            </fieldset>
        </form>
    </div>
    ';
}
?>
1
Emily Childers

ブラウザーに何かをすでに印刷している場合、リダイレクトを実行する方法はありません。 (リダイレクトを行うには、適切なヘッダーをブラウザーに送信する必要があります。ヘッダーは出力の前に送信する必要があります。)

したがって、リダイレクトを実行する場合は、そのようなコードをテンプレートに直接配置することはできません(すべきではありません)。それはfunctions.phpに配置し、いくつかのフックで実行する必要があります。

また...アクションを設定せずにフォームを送信することは最善の方法ではありません-これはセキュリティ上の問題です。そして、WPにはすでに組み込まれているメカニズムがあり、そのようなリクエストに使用する必要があります。

したがって、これを適切に行う場合は、次のようになります...

functions.phpファイル:

function process_my_form() {
    if ( ! empty($_POST['password']) ) {
        $redirect = ($_POST['password']);
        $redirect = str_replace(" ","-",$redirect);
        $redirect = strtolower($redirect);
        wp_redirect( "/bids/$redirect" );
        die;
    }

    wp_redirect( '<URL OF YOUR FORM>' );  // redirect back to the form, so replace it with correct URL
    die;
}
add_action( 'admin_post_process_my_form', 'process_my_form' );
add_action( 'admin_post_nopriv_process_my_form', 'process_my_form' );

そしてあなたのテンプレートファイルで:

<div class='row secureform__container'>
    <form id='securedownloads' class='secureform' method='post' action='<?php echo esc_attr( admin_url('admin-post.php') ); ?>'>
        <fieldset class='secureform__inner'>
            <label for='password' class='secureform__label'>Password:</label>
            <input id='password' type='text' name='password' maxlength='40' class='secureform__input'>
            <input type='submit' value='login' class='secureform__submit'>
            <input type='hidden' name='next' value=''>
            <input type='hidden' name='action' value='process_my_form'>
        </fieldset>
    </form>
</div>
2

代わりにJavaScriptリダイレクションを試してください。

echo "<script>location.href = '$redirect_url';</script>";

exit;

WPねじ込まれたアーキテクチャで汚くなりすぎず、文字通り私のライブを救った。

0
Arthur Bezner