Поддержка Проблемы и решения Сортировка постов на главной странице

  • Помогите пожалуйста решить следующую задачу:
    мне необходимо выводить на главную страницу свежие посты по рубрикам, т.е.
    Название рубрики 1
    2 последних поста рубрики 1
    Название рубрики 2
    2 последних поста рубрики 2
    Название рубрики 3
    2 последних поста рубрики 3
    Прошу подсказать или дать ссылки на полезный материал по теме. В поисковиках решения пока найти не удалось.
    Заранее благодарен откликнувшимся.

Просмотр 14 ответов — с 1 по 14 (всего 14)
  • Это воспроизвести несложно, только вам надо определиться, какой уровень категорий брать (родитель, дочка, внучка, если таковые есть) и что делать, если пост дублируется (если таковые есть) в нескольких категориях.
    Подсказываю:
    получаете категории
    $categories = get_categories();
    Уходите в цикл
    foreach (categories as category) {
    выводите заголовок категории, ссылку, что там еще надо, затем получаете два поста к этой категории
    $posts = get_posts(array('numberposts' => 2,'category' => $category->term_id))
    опять уходим в цикл
    foreach ($posts as post) {
    здесь выводим название, ссылку поста, и что еще надо.
    не забываем закруглить оба цикла
    }}
    Останется только оформить все дело стилями и радоваться жизни 😉

    Помогут функции get_categories() и get_posts()

    Спасибо огромное за подробный ответ.
    Я хочу использовать только 3 конкретные родительские категории (есть и другие). Как их указать?

    только 3 конкретные

    $categories = get_categories(array('include' => '1,2,3');
    где 1,2,3 — ID категорий, которые вы хотите включить в выборку.

    Я вам дал ссылку на доки, там подробнее все возможные аргументы описаны.

    спасибо, буду разбираться

    можно сделать грубо=)

    <?php $query = new WP_Query(‘cat=1&posts_per_page=2’); // указываем категорию 1 и двапосто на странице
    while($query->have_posts()){ $query->the_post(); ?>

    ///////********* здесь содержимое******//////
    <?php } ?>
    <?php wp_reset_postdata(); // сбрасываем переменную $post ?>

    Почему грубо и в чем принципиальная разница?
    Я пока новичок зеленый)) еще первый вариант не собрал

    Уважаемый wikicms! Помогите доразобраться.
    Предложенный принцип построения понятен, но у меня проблемы с:

    выводите заголовок категории, ссылку, что там еще надо, затем получаете два поста к этой категории

    Подскажите пожалуйста, как указать название категории со стилем <h2 class=»page-title»> и ссылкой на соответствующую категорию.

    здесь выводим название, ссылку поста, и что еще надо.
    не забываем закруглить оба цикла

    Для постов необходимо вывести анонсы

    Подскажите пожалуйста, как указать название категории со стилем <h2 class=»page-title»> и ссылкой на соответствующую категорию.

    <h2 class="page-title"><a href="<?php the_permalink() ?>"><?php the_title(); ?></a></h2>

    Для постов необходимо вывести анонсы

    <?php the_excerpt(); ?>

    как указать название категории со стилем <h2 class=»page-title»> и ссылкой на соответствующую категорию.

    Примерно так:

    echo '<h2 class="page-title">Category: <a href="' . get_category_link( $category->term_id ) . '" title="' . sprintf( __( "View all posts in %s" ), $category->name ) . '" ' . '>' . $category->name.'</a></h2>';

    Для постов необходимо вывести анонсы

    $post->post_excerpt
    или так (если хотим больше)

    foreach($posts as $post) : setup_postdata($post); ?>
    	<h2><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></h2>
    	<?php the_excerpt(); ?>
    <?php endforeach; ?>

    —-
    Кстати, дальше указанных мной ссылок я никуда и не ходил, и все примеры взял оттуда 😉
    —-
    Прим.: Этот код, как и мультилуп будут производить эн-ное количество запросов к БД, поэтому без надобности не увлекайтесь сим чудом, ну или на крайний случай, используйте кеширование. В моем случае это будет 1 запрос на «взятие» категорий и 3 на получение постов.. Может и еще что вылезет, шут, как говорится, его знает 🙂

    Спасибо wikicms и ddd7777!
    Уж простите дурака))) Мне без базовых знаний тяжеловато разобраться, и я уже собрал комплект parse error)))) Хотел посоветоваться, может проще тогда собирать код примитивно: заголовки разделов набрать ручками, а к БД отправлять только в поисках последних постов в конкретной категории? правда видимо придется 3 раза отправлять))) Или я все не правильно понимаю.

    Вывел заголовок раздела (решил пока без ссылки сделать):

    <h2 class="page-title"><?php printf( __( '<span>%s</span>', 'themater' ), 'La-la-la'); ?></h2>

    Дальше в индексе у меня шел следующий код, выводящий свежие посты:

    <?php
    if (have_posts()) : while (have_posts()) : the_post();
    get_template_part('post', 'homepage');
    endwhile;
    else :
    get_template_part('post', 'noresults');
    endif;
    get_template_part('navigation');
    ?>

    Как этот код переделать, указав из какой конкретной категории (со всеми ее дочками) брать посты и что этих постов должно быть всего 2? и можно ли его отчистить от излишних вариантов (если, если,….. ведь в категории точно есть посты)
    И так планирую сделать 3 раза. Или я не правильно рассуждаю?

    Получилась следующая конструкция:

    <?php
    $categories = get_categories(array('include' => '1,2,4'));
    foreach($categories as $category) {
    echo '<h2 class="page-title"><a href="' . get_category_link( $category->term_id ) . '" title="' . sprintf( __( "View all posts in %s" ), $category->name ) . '" ' . '>' . $category->name.'</a></h2>';
    $posts = get_posts(array('numberposts' => 2,'category' => $category->term_id));
    foreach ($posts as post) {
    the_excerpt();
    }
    }
    ?>

    Причем get_categories работает как надо, за что большое спасибо, а вот после добавления get_posts выдает ошибку:

    Parse error: syntax error, unexpected ‘)’, expecting T_PAAMAYIM_NEKUDOTAYIM

    Взываю о помощи

    Доллар забыли

    foreach ($posts as $post) {
    the_excerpt();
    }

    как прозаично 🙂 спасибо

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