Чтобы скрыть определенные типы постов в пагинации на страницах single и page в WordPress, но оставить их в лентах (архивах, главной странице и т.д.), можно использовать фильтр `pre_get_posts`. Этот фильтр позволяет изменить основные запросы WP_Query до того, как они будут выполнены. Однако в контексте single и page страниц, это не так просто, так как пагинация зависит от соседних постов (previous и next).
Для начала создадим функцию в файле `functions.php` вашей темы, которая будет проверять, является ли страница single или page, и исключать определенные типы постов из пагинации:
```php
function exclude_posts_from_pagination($query) {
if (!is_admin() && $query->is_main_query()) {
if (is_single() || is_page()) {
// Исключаем определенные типы постов из пагинации
// Замените 'custom_post_type' на ваш кастомный тип поста
$query->set('post_type', array('post')); // Здесь перечисляются типы постов, которые вы хотите включить
}
}
}
add_action('pre_get_posts', 'exclude_posts_from_pagination');
```
**Обратите внимание, что данная функция может не сработать для пагинации single.php, так как этот шаблон обычно не использует WP_Query для вывода следующего/предыдущего поста.**
Для изменения логики пагинации на single.php (предыдущий и следующий пост), вам нужно будет настроить функции `previous_post_link()` и `next_post_link()` соответственно. В этих функциях вы можете определить `in_same_term` и указать таксономию, чтобы ограничить их использование.
Другой вариант - это использование хука `get_previous_post_where` и `get_next_post_where` для фильтрации и исключения определенных типов постов из пагинации. Вот пример того, как это можно сделать:
```php
function filter_next_previous_post_where($where) {
global $post;
// Исключить определенные типы постов
$where .= " AND p.post_type = 'post'";
return $where;
}
add_filter('get_previous_post_where', 'filter_next_previous_post_where');
add_filter('get_next_post_where', 'filter_next_previous_post_where');
```
Этот код добавит дополнительное условие в SQL-запрос для выбора предыдущего и следующего поста по типу поста `post`. Типы постов, которые вы хотите исключить, необходимо убрать из условия.
Эти изменения позволят вам изменить логику предыдущей и следующей ссылок на странице отдельных записей и статических страниц, исключив необходимые вам типы постов.