Поддержка Проблемы и решения вывод рандомных записей из разных категорий — WordPress

  • Здравствуйте уважаемые форумчане. Необходима помощь в одном деле. Я не програмист пхп но как верстальшик немного теории знаю php. Сверстал на бутстрап выданый мне PSD и теперь его необходимо натянуть на вордпресс. Это я уже сделал. Но, есть маленькая проблемка. Для меня она большая. есть функция query_posts() где я указываю с каких категории, какое количество и как выводить. Тут все норм.

    Теперь сама проблема. Допустим есть некий пост, в футере этого поста шесть блоков по три в два ряда. Также есть категории одна из который категория реклама.

    Задача вывести рандомно максимум шесть постов три поста из который должны быть из категории реклама, а остальные три из всех других при этом исключив текущий просматриваемый пост.

    3 дня гуглю, делаю какие-то эксперименты, ну ни как.

Просмотр 8 ответов — с 1 по 8 (всего 8)
  • Модератор Yuri

    (@yube)

    Задача вывести рандомно максимум шесть постов три поста из который должны быть из категории реклама, а остальные три из всех других при этом исключив текущий просматриваемый пост.

    Я бы делал примерно так (вот прямо по Вашему описанию):
    1. получаем 3 поста из рубрики «реклама», используя get_posts()

    
    $a = get_posts(array('numberposts'=>3, 'category'=>42));
    

    2. получаем 3 поста из всех рубрик, кроме «реклама», и исключая текущий пост.

    
    $b = get_posts(array('numberposts'=>3, 'category'=>-42, 'exclude'=>get_the_ID()));
    

    3. сливаем оба массива в один

    
    $c = array_merge($a, $b);
    

    4. перемешиваем полученный массив

    
    $c = shuffle($c);
    

    5. в цикле выводим посты из массива.

    
    
    foreach ($c as $p ){
    ###
    }
    

    (Код исключительно для иллюстрации)

    есть функция query_posts()

    Забудьте о ней. Не читайте старьё.
    Используйте wp_query (get_posts, pre_get_posts) и правильную документацию.

    А ещё лучше — подберите в оф каталоге тему, похожую по структуре и сделайте к ней дочку. Это не только облегчит работу и возможно добавит функциональности, но и повысит безопасность и совместимость с будущими версиями ВП и плагинов.

    • Ответ изменён 6 лет, 11 месяцев назад пользователем SeVlad. Причина: поправил ссылку

    Юрий спасибо. Посмотрел вами данный код и похоже это сработает(я себе что-то в этом роде представлял, но не знал как реализовать.). В понедельник протестирую.

    SeVlad Да вы правы, документация прямо под носом. Я пытался читать, понять, но для меня почему-то запутано кажется и перешел на видео ютуб. Или я как-то не правильно воспринимаю. Был бы очень благодарен вам если бы меня направили. От посадки верстки до профи в этой документации. Где начать, а где финишировать.

    киньте ссылки пожалуйте в порядке сверху вниз. от 0 до про.

    п.с. Я даже эту ветку с трудом нашел )))

    Жду еще варианты

    исчерпывающая информация по циклам тут — https://codex.wordpress.org/Class_Reference/WP_Query

    Был бы очень благодарен вам если бы меня направили. От посадки верстки до профи в этой документации. Где начать, а где финишировать.

    Начиная от ссылки которую я дал. Лучше, конечно, перейти на англ версию.

    Но ещё раз повторю — в данном случае наверняка лучше сделать дочернюю тему. Это будет и проще и быстрее и правильнее. А более глубоким изучением устройства тем ВП займетесь позже.

    Тема ВП — это (как Вы уже наверное убедились), не только внешний вид, но и множество функций.

    АПД. В посте выше поправил ссылку на wp_query.

    • Ответ изменён 6 лет, 11 месяцев назад пользователем SeVlad.

    короче сработало ваша идея Юрий.
    но пришлось попотеть. )) Выше демонстрационный код давали, а я чайник )))) но сделал все же благодаря документации спасибо за это SeVlad

    предоставляю готовое решение для тех кто сталкнется с такой ситуацией. Сразу скажу. решение не идеальное. Надеюсь кто-то доработает

      <?php
      $posts1 = get_posts(array(‘orderby’=> rand, ‘numberposts’=>3, ‘category’=>9));
      $posts2 = get_posts(array(‘orderby’=> rand, ‘numberposts’=>3, ‘category’=>-9));
      $posts = array_merge($posts1, $posts2);
      $posts = get_posts(‘orderby=rand’);
      foreach($posts as $post) { ?>


    • » title=»<?php the_title(); ?>»><?php the_title(); ?>
    • <?php } ?>

    да еще одна проблемка появилась после )) комменты начали рандомить )) решение: перед закрывающим тегом ?> поставить wp_reset_postdata(); и все будет норм

Просмотр 8 ответов — с 1 по 8 (всего 8)
  • Тема «вывод рандомных записей из разных категорий — WordPress» закрыта для новых ответов.