Top.Mail.Ru
Ответы
Аватар пользователя
8лет
Изменено
Аватар пользователя
Аватар пользователя
Аватар пользователя
Программирование
+4

Wordpress. Исключить текущую запись из выборки в php

Есть кусок кода в текстовом виджете (в functions.php разрешён php-код для текстового виджета):

<?php
global $post;
$args = array( 'posts_per_page' => 4, 'offset'=> 0, );
$myposts = get_posts( $args );
foreach( $myposts as $post ) : setup_postdata($post); ?>

из него необходимо исключить текущую запись, то есть ту запись, на одной странице с которой выполняется код.
Пытаюсь реализовать добавлением параметра exclude

<?php
global $post;
$args = array( 'posts_per_page' => 4, 'offset'=> 0, 'exclude'=>$post->ID);
$myposts = get_posts( $args );
foreach( $myposts as $post ) : setup_postdata($post); ?>

Но не удаётся. И ещё кажется, что первый раз срабатывает, а потом после обновления страницы или перехода к другой записи опять правило исключения не работает.
Может быть, кто-то сможет острым глазом или опытным взглядом определить, где промах? Чего именно в коде не хватает для исключения текущей записи?

Дополнен

Вот снова. Сделал код

<?php
global $post;
$args = array( 'posts_per_page' => 4, 'offset'=> 0, 'exclude'=>array($post->ID),);
$myposts = get_posts( $args );
foreach( $myposts as $post ) : setup_postdata($post); ?>

т. е. добавил array к $post->ID
Обновляю страницу, ура, текущая страница не попадает в виджет. Потом перехожу к другой записи - все попадают. Возвращаюсь к первой записи - снова все попадают. Почему-то только один раз срабатывает

Дополнен

Перезагружаю браузер и вновь: первое посещение страницы - правило исключения срабатывает. Для всех последующих - не срабатывает.
<?php wp_reset_postdata() ?> последней строкой прописано

По дате
По рейтингу
Аватар пользователя
8лет

Вообще, странновато выводите записи. Откуда код?
Что за виджет? Случайные записи?