• Добрый день! у меня задача вывести непрочитанные записи. Я собираю куки просмотренных и исключаю их из вывода, но при подставлении переменной в post__not_in не хочет работать. Подскажите что не так?

      <?php $exclude_ids = ""; ?>
        <?php
        if ($_COOKIE['viewedPost']) {
            foreach ($_COOKIE['viewedPost'] as $viewedProdId) {
                $exclude_ids .=  $viewedProdId . ', ';
            }
        }
        ?>
    
        <?php
        $args = array(
            'post_type' => 'post',
            'post__not_in' => array($exclude_ids),
            'orderby' => 'rand',
            'posts_per_page' => 5
        );
    
        // run the query
        $query = new WP_Query($args); ?>
    
        <?php if ($query->have_posts()) : ?>
            <?php while ($query->have_posts()) : $query->the_post(); ?>
                <div class="noReadItem"><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></div>
            <?php endwhile;
            wp_reset_postdata(); ?>
        <?php endif; ?>
    
    • Тема изменена 3 года, 4 месяца назад пользователем face2005.
    • Тема изменена 3 года, 4 месяца назад пользователем face2005.
Просмотр 5 ответов — с 1 по 5 (всего 5)
  • Модератор Юрій

    (@yube)

    Подскажите что не так?

    array($exclude_ids), меняет тип переменной, но не превращает элементы списка, находщиеся в строке (откуда вообще php знать, что там список?), в элементы массива. То есть строка '1, 2, 3' превращается в массив из одного элемента-строки ['1, 2, 3'], а не в массив из трех чисел [1, 2, 3], который нужен для WP_Query. В правильный массив конвертирует explode(',', $exclude_ids). Но лучше сразу собирать значения в массив $exclude_ids[] = $viewedProdId;. Хотя, судя по foreach, $_COOKIE[‘viewedPost’] и так уже массив чисел, готовый к употреблению. Впрочем, я бы его перед использованием проверил на адекватность значений.

    Имейте в виду, что куки у браузера не резиновые и рано или поздно они забьются, и тогда без ручной чистки (на стороне юзера) не обойтись.

    Спасибо!

    $exclude_ids = explode(',', $exclude_ids);

    вставляю

    'post__not_in' => $exclude_ids,

    не хочет работать, вставляю $_COOKIE[‘viewedPost’]

    'post__not_in' => $_COOKIE['viewedPost'],

    тоже не хочет..

    print_r($_COOKIE[‘viewedPost’]) :
    Array ( [90] => 90 [103] => 103 [111] => 111 [113] => 113 [98] => 98 [112] => 112 [110] => 110 [102] => 102 [104] => 104 )

    print_r($exclude_ids) :
    Array ( [0] => 90 [1] => 103 [2] => 111 [3] => 113 [4] => 98 [5] => 112 [6] => 110 [7] => 102 [8] => 104 [9] => )

    • Ответ изменён 3 года, 4 месяца назад пользователем face2005.
    Модератор Юрій

    (@yube)

    Как Вы понимаете, повторить у себя Вашу ситуацию я не могу.
    Но вообще механизм рабочий.
    screenshot 1 screenshot 2

    когда руками прописываю id в исключение и у меня работает….

    Модератор Юрій

    (@yube)

    Значит, я чего-то не вижу. Увы. Может кто-то более зоркий увидит и подскажет.

Просмотр 5 ответов — с 1 по 5 (всего 5)
  • Тема «post__not_in не работает» закрыта для новых ответов.