由于 header,setcookie 无法使用 wordpress
setcookie not working wordpress because of header
我有一个 WordPress 插件想要创建 cookie,但它不起作用。非常感谢您的帮助。
add_shortcode( 'watchlist', 'cwatchlist_short' );
function cwatchlist_short() {
echo '<div class="wrap"><center>';
echo "<form method='POST' action=''";
echo '<p>Please enter the initial of the cryptocurrency or the symbol you want to add to the watchlist!</p> <p>For example: BTC</p>';
echo "<p><input type='text' name='symbol' placeholder='Initials or symbol'>";
echo "<p><input type='submit' value='Submit'>";
echo "</form></center>";
echo '</div>';
if (isset($_POST["symbol"])){
$x = $_COOKIE['xvalue'] + 1;
setcookie( 'xvalue', $x, time() + 108000, COOKIEPATH, COOKIE_DOMAIN );
调试显示:Cannot modify header information - headers already sent
by
我真的需要帮助。
谢谢
最好的问候
您不能在短代码函数中设置 cookie,因为 headers 已经由 WordPress 发送。 setcookie() 定义一个 cookie 与 HTTP headers 的其余部分一起发送,所以如果你想设置一个 cookie 值,它需要在 [= 之前或期间添加到钩子中14=]勾.
请在文件顶部使用 ob_start();
函数,在要使用 cookie 的代码后使用 ob_end_flush()
函数。
ob_start 函数: 打开输出缓冲。
ob_end_clean 功能: 清除缓冲区并关闭缓冲。
setcookie 函数无法在直接页面 运行 过程中工作,它总是抛出 header 已经设置的错误消息。
要解决此问题,必须为 setcookie 使用新函数并在初始化操作中添加此函数。
例如
add_action( 'init', 'my_setcookie_example' );
function my_setcookie_example() {
setcookie( "name", "value", time(), "/", COOKIE_DOMAIN );
}
在你的情况下,需要删除 "setcookie( 'xvalue', $x, time() + 108000, COOKIEPATH, COOKIE_DOMAIN );" 并放入函数中,然后在其位置添加 "add_action" 挂钩。
感谢您的所有回答! OB_START 对我不起作用,也许我的代码有问题但我无法使用它。
admin post 也是解决它的好方法,但对我来说更简单的方法是少更改我的代码,我在我的函数中使用了 add_action。
add_shortcode( 'watchlist', 'cwatchlist_short' );
add_action( 'init', 'my_setcookie_example' );
add_action( 'init', 'my_setcookie_isset');
function my_setcookie_isset() {
if(isset($_COOKIE['xvalue'])){
} else{
setcookie ("xvalue","0",time() + 108000, COOKIEPATH, COOKIE_DOMAIN);
}
if (isset($_COOKIE['thejson'])){
} else{
setcookie ("thejson"," ",time() + 108000, COOKIEPATH, COOKIE_DOMAIN);
}
}
function my_setcookie_example() {
if (isset($_POST["symbol"])){
setcookie ("thejson","1",time() + 108000, COOKIEPATH, COOKIE_DOMAIN);
所以基本上我所做的是在 header 之前添加一个新功能 运行 并检查表单是否已完成。如果 textbobx SYMBOL 已完成,那么我将设置一个 cookie。此外,我还为所有 cookie 设置了一个不重要的值,以确保在此过程中不会出现错误。
因此,如果您遇到问题,除了在短代码中设置 cookie 和检查文本框 isset 的函数。 运行 在 header!
之前使用 INIT 的函数
谢谢大家,因为这是我从你们所有的回答、想法和链接中得出的结论!
此致
我有一个 WordPress 插件想要创建 cookie,但它不起作用。非常感谢您的帮助。
add_shortcode( 'watchlist', 'cwatchlist_short' );
function cwatchlist_short() {
echo '<div class="wrap"><center>';
echo "<form method='POST' action=''";
echo '<p>Please enter the initial of the cryptocurrency or the symbol you want to add to the watchlist!</p> <p>For example: BTC</p>';
echo "<p><input type='text' name='symbol' placeholder='Initials or symbol'>";
echo "<p><input type='submit' value='Submit'>";
echo "</form></center>";
echo '</div>';
if (isset($_POST["symbol"])){
$x = $_COOKIE['xvalue'] + 1;
setcookie( 'xvalue', $x, time() + 108000, COOKIEPATH, COOKIE_DOMAIN );
Cannot modify header information - headers already sent
by
我真的需要帮助。
谢谢
最好的问候
您不能在短代码函数中设置 cookie,因为 headers 已经由 WordPress 发送。 setcookie() 定义一个 cookie 与 HTTP headers 的其余部分一起发送,所以如果你想设置一个 cookie 值,它需要在 [= 之前或期间添加到钩子中14=]勾.
请在文件顶部使用 ob_start();
函数,在要使用 cookie 的代码后使用 ob_end_flush()
函数。
ob_start 函数: 打开输出缓冲。
ob_end_clean 功能: 清除缓冲区并关闭缓冲。
setcookie 函数无法在直接页面 运行 过程中工作,它总是抛出 header 已经设置的错误消息。
要解决此问题,必须为 setcookie 使用新函数并在初始化操作中添加此函数。
例如
add_action( 'init', 'my_setcookie_example' );
function my_setcookie_example() {
setcookie( "name", "value", time(), "/", COOKIE_DOMAIN );
}
在你的情况下,需要删除 "setcookie( 'xvalue', $x, time() + 108000, COOKIEPATH, COOKIE_DOMAIN );" 并放入函数中,然后在其位置添加 "add_action" 挂钩。
感谢您的所有回答! OB_START 对我不起作用,也许我的代码有问题但我无法使用它。 admin post 也是解决它的好方法,但对我来说更简单的方法是少更改我的代码,我在我的函数中使用了 add_action。
add_shortcode( 'watchlist', 'cwatchlist_short' );
add_action( 'init', 'my_setcookie_example' );
add_action( 'init', 'my_setcookie_isset');
function my_setcookie_isset() {
if(isset($_COOKIE['xvalue'])){
} else{
setcookie ("xvalue","0",time() + 108000, COOKIEPATH, COOKIE_DOMAIN);
}
if (isset($_COOKIE['thejson'])){
} else{
setcookie ("thejson"," ",time() + 108000, COOKIEPATH, COOKIE_DOMAIN);
}
}
function my_setcookie_example() {
if (isset($_POST["symbol"])){
setcookie ("thejson","1",time() + 108000, COOKIEPATH, COOKIE_DOMAIN);
所以基本上我所做的是在 header 之前添加一个新功能 运行 并检查表单是否已完成。如果 textbobx SYMBOL 已完成,那么我将设置一个 cookie。此外,我还为所有 cookie 设置了一个不重要的值,以确保在此过程中不会出现错误。 因此,如果您遇到问题,除了在短代码中设置 cookie 和检查文本框 isset 的函数。 运行 在 header!
之前使用 INIT 的函数谢谢大家,因为这是我从你们所有的回答、想法和链接中得出的结论!
此致