我在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
。
答案 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检查。这样,您将不需要简码标签。