如何在标题发送后重定向页面? WordPress的

时间:2016-08-24 10:03:25

标签: php wordpress

我在wordpress上制作了一个插件。当用户单击主页上的视图发布按钮时,它将检查某些条件以允许用户查看帖子。

如果不允许用户查看帖子,页面将被重定向到错误页面。

但是,问题在于,插件是由快捷方式运行的,因此该函数将在加载帖子后运行。它出现了这个错误Cannot modify header information - headers already sent by (output started at /home/wordpress/wp-includes/class.wp-styles.php:237)

如何在发送标头后重定向网址?

另外,我需要让它成为捷径。

很多。

这是我的代码:

   function add_post_condition_vpc($atts, $content = null)
    {      

     $userPoint = getPointFromDb();
   if($userPoint > 50)
                  {           

                     //redirect the the page to the view-post-direct-page.php
                     $page_file_temp = $_SERVER["PHP_SELF"];
                     $url= dirname($page_file_temp) . "/view-post-direct-page.php";
                     header("Location: $url ");
                     return "redirect";

                  }
  } 

  add_shortcode('view_post_lmc', 'add_post_condition_vpc');

在分享按钮中,我使用此代码获取当前发布的网址:

$actual_link = "http://$_SERVER[HTTP_HOST]$_SERVER[REQUEST_URI]";

然后我在帖子上添加短代码。

我找到了解决方案。

这是我的代码:

//redirect the the page to the view-post-direct-page.php
$page_file_temp = $_SERVER["PHP_SELF"];
$url= dirname($page_file_temp) . "/view-post-direct-page.php";

$string = '<script type="text/javascript">';
$string .= 'window.location = "' . $url . '"';
$string .= '</script>';

return $string;

使用Javascript来避免发送header again

2 个答案:

答案 0 :(得分:0)

将此添加到 functions.php 中:

function app_output_buffer() {
    ob_start();
} // soi_output_buffer
add_action('init', 'app_output_buffer');

在这里找到它:https://tommcfarlin.com/wp_redirect-headers-already-sent/

答案 1 :(得分:0)

您为什么要为此检查使用简码?

我认为您最好使用Wordpress的init hook。将此添加到functions.php或您的插件文件中,将在加载页面之前执行检查:

function add_post_condition_vpc() {      
     $userPoint = getPointFromDb();

     if($userPoint > 50) {           
           $page_file_temp = $_SERVER["PHP_SELF"];
           $url= dirname($page_file_temp) . "/view-post-direct-page.php";
           header("Location: $url ");
           exit(); // just exit, return is not needed here
        }
} 

add_action('init', add_post_condition_vpc);

如果帖子中贴有某种标签,则可以在此功能中执行检查。以及何时运行userpoint检查。这样,您将不需要简码标签。