Вопрос или проблема
Я пытаюсь получить несколько постов из другого блога, но это не сработает, если я хочу их из конкретной категории.
switch_to_blog(1);
$replays = get_posts([
'post_type' => 'post',
'numberposts' => 10,
'category' => 1
]);
// Что угодно ...
restore_current_blog();
Однако это работает, как задумано, если мне не нужна конкретная категория.
Является ли это нормальным поведением? Нужно ли мне писать пользовательский SQL-запрос?
Ответ или решение
Вопрос, с которым вы столкнулись, связан с попыткой извлечь посты из другой блога в сети WordPress Multisite на основе определенной категории. Давайте разберемся в этом подробнее.
При использовании функции get_posts()
в WordPress для получения записей из другой подсети с помощью switch_to_blog()
, вы действительно столкнулись с некоторыми особенностями. Вот основные моменты, на которые стоит обратить внимание:
1. Использование правильного параметра
Ваша реализация выглядит следующим образом:
$replays = get_posts([
'post_type' => 'post',
'numberposts' => 10,
'category' => 1 // ID нужной категории
]);
Обратите внимание, что вместо 'category'
следует использовать 'category__in'
или 'cat'
. Параметр 'cat'
предназначен для передачи идентификатора категории:
$replays = get_posts([
'post_type' => 'post',
'numberposts' => 10,
'cat' => 1 // ID нужной категории
]);
2. Разделение категорий в сетевой структуре
В WordPress Multisite каждая подсеть имеет свои собственные категории и термины таксономии. Это означает, что идентификатор категории в одной подсети не обязательно соответствует идентификатору категории в другой. Чтобы корректно извлечь записи из указанной категории, вам необходимо убедиться, что ID категории, который вы используете, относится именно к блогу, из которого вы пытаетесь извлечь посты.
3. Проверка существования категории
Убедитесь, что такая категория существует в целевом блоге. Вы можете использовать функцию get_terms()
для проверки существования категории перед выполнением запроса:
$category = get_term_by('id', 1, 'category', 'blog_1');
if ($category) {
// Получаем посты из этой категории
// ...
}
4. Вопрос использования кастомного SQL-запроса
Чаще всего использование стандартных функций WordPress, таких как get_posts()
, должно быть достаточно. Однако если стандартные функции не предоставляют необходимую гибкость, вы можете использовать кастомные SQL-запросы. При этом будьте внимательны с безопасностью и корректным формированием запросов.
Пример кода
Вот переработанный пример вашего кода:
switch_to_blog(1);
$replays = get_posts([
'post_type' => 'post',
'numberposts' => 10,
'cat' => 1 // Убедитесь, что '1' - это ID категории в блоге 1
]);
restore_current_blog();
Заключение
Используя вышеприведенные рекомендации, вы сможете корректно извлекать посты из других блогов по определенным категориям. Не забывайте проверять существование категории и использовать правильные идентификаторы. Если у вас возникнут дополнительные вопросы, не стесняйтесь обращаться за помощью.