我有一个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 );
&#13;
Cannot modify header information - headers already sent
by
我真的需要帮助。
谢谢
最好的问候
答案 0 :(得分:1)
您无法在短代码功能中设置Cookie,因为标题已由WordPress发送。 setcookie()定义了一个与其他HTTP头一起发送的cookie,因此如果你想设置一个cookie值,需要在 send_headers 钩子之前或期间添加一个钩子。< / p>
答案 1 :(得分:0)
请在文件顶部使用while($row = mysqli_fetch_array($result)){
$res2[] = array(
"name"=>$row['name'],
"publisher"=>$row['username'],
"image"=>$row['photo'],
# Using the username as the key name, see if it $res has a saved value
"photouser" => (isset($res[$row['username']]))? $res[$row['username']] : false
);
}
功能,并在要使用Cookie的代码后使用ob_start();
功能。
ob_start函数:打开输出缓冲。
ob_end_clean function:清除缓冲区并关闭缓冲。
答案 2 :(得分:0)
setcookie函数无法在直接页面运行过程中工作,它总是抛出标题已设置错误信息 要解决这个问题,必须使用setcookie&amp; amp;的新功能。在init操作上添加此功能。
对于前。
add_action( 'init', 'my_setcookie_example' );
function my_setcookie_example() {
setcookie( "name", "value", time(), "/", COOKIE_DOMAIN );
}
&#13;
在您的情况下,需要删除&#34; setcookie(&#39; xvalue&#39;,$ x,time()+ 108000,COOKIEPATH,COOKIE_DOMAIN);&#34; &安培;放入功能,然后添加&#34; add_action&#34;钩住它。
答案 3 :(得分:0)
感谢您的所有答案! OB_START对我没有用,也许我的代码中存在问题,但我无法使用它。 管理员帖子也是一个解决它的好方法,但对我来说更简单的方法是更少地改变我的代码,我在我的函数中使用了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);
&#13;
所以我基本上做的是添加一个新的函数,它将在标题之前运行,并检查表单是否已完成。如果textbobx SYMBOL完成,那么我设置了一个cookie。此外,我将所有cookie设置为非重要值,以便在此过程中没有错误。 因此,如果您遇到问题,除了在短代码中设置cookie和检查文本框的设置的函数。在标题之前运行该函数以使用INIT!
感谢所有人,因为这是我的所有答案,想法和链接的结论!
最好的问候