@easycode
не боюсь задавать глупые вопросы ))

Уникальный набор похожих записей кастомного типа в WordPress?

На странице каждой записи моего кастомного типа нужно отображать уникальный набор похожих записей - минимум 4 шт.
Похожие записи могут повторятся для разных товаров, но набор (сочетание / порядок) их должен быть строго уникальным для каждой страницы записи.

Готовых плагинов я на не нашел.

Похожесть записей буду определять по категории записи.
Возьму любую запись и посмотрю на её соседей по категории слева (2шт.) и справа (2шт.) - вот и уникальный набор.

Но, если окажется, что в категории всего 3 товара - придется лезть в соседнюю категорию и оттуда дополнять уникальный набор - вот тут уже сложнее кажется...
  • Вопрос задан
  • 52 просмотра
Решения вопроса 1
@easycode Автор вопроса
не боюсь задавать глупые вопросы ))
Пока что быстренько набросал такой некрасивый вариант без учета влезания в соседние категории - нужно будет доделать потом:

$_product_id = get_the_ID();
$cat_ids = wp_get_object_terms( $_product_id, 'cats', array('fields'=>'ids') );
if ( is_array($cat_ids) and count($cat_ids) ) {
    $_posts = get_posts( array(
        'numberposts' => -1,
        'post_type'   => 'product',
        'tax_query' => array(
            array(
                'taxonomy' => 'cats',
                'field' => 'id',
                'terms' => $cat_ids,
                'include_children' => true,
            )
        ),
    ) );

    if ( is_array($_posts) and count($_posts) ) {
        foreach ($_posts as $_post) {
            $_index[] = $_post->ID;
            $_posts_ids[$_post->ID] = $_post;
        }

        $post_index = array_search( $_product_id, $_index );

        if ($post_index) {

            $_products_ids = array();
            $_index_count = count($_index);

            if ( isset($_index[$post_index-2]) )
                $_products_ids[] = $_index[$post_index-2];
            elseif ($post_index-1 == 0)
                $_products_ids[] = $_index[$_index_count-1];
            else 
                $_products_ids[] = $_index[$_index_count-2];

            if ( isset($_index[$post_index-1]) )
                $_products_ids[] = $_index[$post_index-1];
            else
                $_products_ids[] = $_index[$_index_count-1];

            if ( isset($_index[$post_index+1]) )
                $_products_ids[] = $_index[$post_index+1];
            else
                $_products_ids[] = $_index[0];

            if ( isset($_index[$post_index+2]) )
                $_products_ids[] = $_index[$post_index+2];
            elseif ($post_index == $_index_count-1)
                $_products_ids[] = $_index[1];
            else
                $_products_ids[] = $_index[0];

            if ( count($_products_ids) ) {
                foreach ($_products_ids as $_id) {
                    if ( is_object($_posts_ids[$_id]) )
                        $_products[$_id] = $_posts_ids[$_id];
                }
            }
        }
    }
}
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
SpiderPigAndCat
@SpiderPigAndCat
занимаюсь салообразованием
если нету в текущей категории то создаешь новый обьект args в котором делаешь +1 к id категории
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы