setcookie не работает WordPress из-за заголовка - PullRequest
0 голосов
/ 07 мая 2018

У меня есть плагин WordPress, который хочет создавать куки, но он не работает. Буду очень признателен за помощь.

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 Мне действительно нужна помощь. Спасибо С наилучшими пожеланиями

Ответы [ 4 ]

0 голосов
/ 08 мая 2018

Спасибо за все ваши ответы! 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);

Итак, в основном я добавил новую функцию, которая должна была выполняться перед заголовком, и проверил, была ли заполнена форма или нет. Если SYMBOL textbobx был завершен, я установил cookie. Также я установил все мои куки с неважным значением, чтобы в процессе не было ошибок. Так что если у вас есть проблема, кроме установки cookie внутри шорткода и функции, которая проверяет набор текстового поля. Запустите эту функцию, используя INIT перед заголовком!

Спасибо всем, потому что это мой вывод из всех ваших ответов, идей и ссылок!

С наилучшими пожеланиями

0 голосов
/ 07 мая 2018

Пожалуйста, используйте функцию ob_start(); вверху файла и функцию ob_end_flush() после кода, где вы хотите использовать куки.

Функция ob_start: Включает буферизацию вывода.

Функция ob_end_clean: Очищает буфер и закрывает буферизацию.

Для более подробной информации http://php.net/manual/en/ref.outcontrol.php

0 голосов
/ 07 мая 2018

Функция setcookie не может работать в процессе прямого запуска страницы, ее всегда выбрасывать заголовок уже установленного сообщения об ошибке.
Для решения этой проблемы необходимо использовать новую функцию для 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 вместо нее.

0 голосов
/ 07 мая 2018

Вы не можете установить cookie в функции шорткода, потому что заголовки уже отправлены WordPress. setcookie () определяет cookie, который будет отправлен вместе с остальными заголовками HTTP, поэтому, если вы хотите установить значение cookie, его нужно добавить в ловушку до или во время ловушки send_headers .

...