Intereting Posts
У кого-нибудь есть плагин, который может автоматически помечать пользовательские типы сообщений в WordPress? Меню виджетов не отображается под «Внешний вид» на панели управления Показать изображение, если опубликовано сообщение Где сохранить общие библиотеки? Искать только сообщения в блоге (виджет поиска WP по умолчанию) Часовой пояс UTC to PST Как предотвратить добавление новых терминов в пользовательскую таксономию? TinyMCE не загружается в IE8 wp-cli отображает только версию PHP для всех параметров ввода Почему wp_head () создает верхний край в верхней части заголовка темы? Как удалить изображения заголовков со всех страниц, кроме главной страницы? скелетная тема Ссылки на главные меню и новые страницы Как создать полноцветное фоновое изображение при наведении курсора на текст? Попытка получить отдельные сообщения для загрузки на первой странице через ajax woocommerce – get_image_size () устарело

Проблема с Loop – хочу ограничить доступ к трем бесплатным статьям

То, что я пытаюсь сделать: если кто-либо, кто не вошел в систему, читает статью, я увеличиваю сессию var на единицу. Сохраните этот идентификатор статьи с помощью глобальной $ post и сохраните $post->ID в массиве. После 3 статей я покажу регистрационную форму. Поэтому я хочу ограничить свободный доступ к статьям трем. Все 3 просмотренных статьи должны быть прочитаны в любом случае.

Основная часть кода:

  function cta_main($content){ global $post; if(!is_user_logged_in()){ if(!isset($_SESSION['last_posts'])){ $_SESSION['last_posts']=array(); $_SESSION['count']=1; $_SESSION['restriction']=false; } echo "POST_SIZE: ".sizeOf($post); echo "<br />Count: ".$_SESSION['count']; if(is_singular() && !$_SESSION['restriction'] && is_main_query()){ if(!cta_isInFreeToWatch()){ //array_push($_SESSION['last_posts'],$post->post_title); $_SESSION['count']++; $_SESSION['last_posts'][]=$post->ID; } if(sizeOf($_SESSION['last_posts'])>=3) $_SESSION['restriction']=true; } } echo "<br /> verbot: ".$_SESSION['restriction']; echo "<br /> anzahl: ".sizeOf($_SESSION['last_posts']); echo "<br /> aktuell: ".$post->ID; echo "<br />"; print_r($_SESSION['last_posts']); if($_SESSION['restriction']) return cta_get_the_restricted_area_message(); if(!$_SESSION['restriction'] || cta_isInFreeToWatch()) return $content; } 

Проблема: Первая статья-> Все в порядке. Таким образом, идентификатор статьи находится в массиве. Вторая статья-> теперь это странно, после загрузки страницы в массиве есть 3 или более идентификаторов. Я не понимаю, почему, потому что я прошу is_single() но он выполняется несколько раз. При каждом нажатии он добавляет несколько идентификаторов в массив. Зачем? Я уверен, что это что-то вроде цикла, но я не могу найти решение для этого. Я думаю, что перед загрузкой всей страницы функция вызывается несколько раз. ( add_filter('the_content','cta_main'); , вот когда вызывается функция).

Solutions Collecting From Web of "Проблема с Loop – хочу ограничить доступ к трем бесплатным статьям"