【问题标题】:Redirect in php not working - WordPress在 php 中重定向不起作用 - WordPress
【发布时间】:2017-08-13 08:24:46
【问题描述】:

我(第一次)开发了一个 WordPress 插件,它是一个简单的注册表单。它将数据发送到 API。在设置页面,您可以选择提交成功后应将用户重定向到哪个页面。但是重定向不起作用。

我得到这样的页面链接:

$options = get_option('rfw_options');
$successPage = (isset($options['rfw_field_success_page']) ? esc_html($options['rfw_field_success_page']) : 'Select Page');

// some code for API call

$status = curl_getinfo($curl, CURLINFO_HTTP_CODE);

if ($status == 200) { // that means if successful 
    $successLink = get_permalink(get_page_by_title($successPage));
    header("Location: '. $successLink .'");
}

即使我将标题位置设置为跟随它不起作用:

header("Location: https://www.google.no/");

在这里你可以看到我是如何设置我的表单的:

function rfw_html_form_code() {
    echo '<form action="' . esc_url($_SERVER['REQUEST_URI']) . '" method="post">';
    echo '<div class="flex-container"><p>';
    _e('Fornavn (obligatorisk)', 'recman-form-widget');
    echo '<br><input type="text" name="rfw-fname" pattern="[A-Za-z\wåäöæéøâèêóòôÅÄÖÆÉØÂÈÊÓÒÔ]+" value="' . $_POST['rfw-fname'] . '"  required />';
    echo '</p>';
    echo '<p>';
    _e('Etternavn (obligatorisk)', 'recman-form-widget');
    echo ' <br /><input type="text" name="rfw-lname" pattern="[A-Za-z\wåäöæéøâèêóòôÅÄÖÆÉØÂÈÊÓÒÔ]+" value="' . $_POST['rfw-lname'] . '"  required />';
    echo '</p></div>';
}

希望有人能帮我解决这个问题。

【问题讨论】:

  • header("Location: '. $successLink .'"); 在语法上是错误的,header("Location: $successLink"); 可以解决问题(因为您使用的是双引号)。但是您可能在发送标头之前有输出,请在文件顶部、&lt;?php 之后启用错误报告error_reporting(E_ALL); ini_set("display_errors", 1);
  • 有一段时间(不太确定现在是否适用)您必须退出;在标题(位置:“www.blah.com”)的末尾,否则我认为它会继续 - 也许只是在一个旧的野生动物园中。无论哪种方式 - 我仍然这样做。

标签: php wordpress api redirect curl


【解决方案1】:

感谢所有帮助,但我不得不使用其他解决方案。

首先我必须将form-元素的action-属性设置为空。

<form action="" method="post">

我的if-statement 现在看起来有点不同(我现在只是在这里调用一个函数):

if ($status == 200) {

    rfw_success_redirect();

    $_POST = array();
}

rfw_success_redirect() 函数如下所示:

function rfw_success_redirect()
{
    $options = get_option('rfw_options');
    $successPage = (isset($options['rfw_field_success_page']) ? esc_html($options['rfw_field_success_page']) : 'Select Page');
    $successLink = get_permalink(get_page_by_title($successPage));

    wp_enqueue_script(
        'javascript',
        plugins_url('js/javascript.js', __FILE__)
    );

    $scripts_params = array(
        'successLink' => $successLink
    );

    wp_localize_script('javascript', 'scriptParams', $scripts_params);
}
add_action('rfw_success_redirect', 'my_enqueue_scripts');

在我的javascript.js 中,我正在设置window.location = scriptParams.successLink;

所以我不得不使用 javascript 来重定向页面。

【讨论】:

    【解决方案2】:

    WordPress 有一个内置的重定向功能wp_redirect()

    你可以这样使用它:

    wp_redirect($successLink);
    exit(); //always exit after redirect.
    

    希望这会有所帮助!

    【讨论】:

      【解决方案3】:

      您实际上可以从该线程How to make a redirect in PHP?获取参考

      另一方面,可能有一些语法错误。请尝试将您的代码替换为header("Location: ".$successLink."");

      尝试使用var_dump($successLink); 转储变量$successLink。检查您的变量是否从页面标题返回所需的链接。

      您还可以使用wp_redirect() 函数进行重定向。环顾四周https://developer.wordpress.org/reference/functions/wp_redirect/

      【讨论】:

      • header("Location: ".$successLink.""); 为什么要在这里处理最后一个连接的(空)字符串?
      • 让我们首先检查变量$successLink 的实际值,方法是转储它,然后将其附加到header() 函数中
      【解决方案4】:

      如果其中一个不起作用......你做错了什么

      header( "LOCATION: http://example.com/" );  // Note that this will not change url / state
      
      <head><meta http-equiv="refresh" content="2;url=http://example.com" /></head>
      
      <script type="text/javascript"> window.location = "http://www.example.com/" </script>
      

      【讨论】:

        猜你喜欢
        • 2011-09-08
        • 1970-01-01
        • 2017-12-08
        • 1970-01-01
        • 2016-01-12
        • 2017-03-06
        • 1970-01-01
        • 1970-01-01
        • 2016-04-14
        相关资源
        最近更新 更多