由于标题

时间:2018-05-06 23:55:56

标签: wordpress cookies plugins setcookie

我有一个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;
&#13;
&#13; 调试显示:Cannot modify header information - headers already sent by 我真的需要帮助。 谢谢 最好的问候

4 个答案:

答案 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:清除缓冲区并关闭缓冲。

有关详细信息http://php.net/manual/en/ref.outcontrol.php

答案 2 :(得分:0)

setcookie函数无法在直接页面运行过程中工作,它总是抛出标题已设置错误信息 要解决这个问题,必须使用setcookie&amp; amp;的新功能。在init操作上添加此功能。

对于前。

&#13;
&#13;
add_action( 'init', 'my_setcookie_example' );
function my_setcookie_example() {
	setcookie( "name", "value", time(), "/", COOKIE_DOMAIN );
}
&#13;
&#13;
&#13;

在您的情况下,需要删除&#34; setcookie(&#39; xvalue&#39;,$ x,time()+ 108000,COOKIEPATH,COOKIE_DOMAIN);&#34; &安培;放入功能,然后添加&#34; add_action&#34;钩住它。

答案 3 :(得分:0)

感谢您的所有答案! OB_START对我没有用,也许我的代码中存在问题,但我无法使用它。 管理员帖子也是一个解决它的好方法,但对我来说更简单的方法是更少地改变我的代码,我在我的函数中使用了add_action。

&#13;
&#13;
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;
&#13;
&#13;

所以我基本上做的是添加一个新的函数,它将在标题之前运行,并检查表单是否已完成。如果textbobx SYMBOL完成,那么我设置了一个cookie。此外,我将所有cookie设置为非重要值,以便在此过程中没有错误。 因此,如果您遇到问题,除了在短代码中设置cookie和检查文本框的设置的函数。在标题之前运行该函数以使用INIT!

感谢所有人,因为这是我的所有答案,想法和链接的结论!

最好的问候