Мультисайты: получать записи с другого блога в определенной категории

Вопрос или проблема

Я пытаюсь получить несколько постов из другого блога, но это не сработает, если я хочу их из конкретной категории.

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();

Заключение

Используя вышеприведенные рекомендации, вы сможете корректно извлекать посты из других блогов по определенным категориям. Не забывайте проверять существование категории и использовать правильные идентификаторы. Если у вас возникнут дополнительные вопросы, не стесняйтесь обращаться за помощью.

Оцените материал
Добавить комментарий

Капча загружается...