Получить все категории и посты в категориях

Я ищу решение, которое позволит мне вывести следующее:

Cat 1        Cat 2        Cat 3
 Post 1       Post 1       Post 1
 Post 2       Post 2       Post 2
 Post 3                    Post 3
                           Post 4

ОТРЕДАКТИРОВАНО

Я ищу что-то, что потребует только один запрос к базе данных! Планирую разместить это на домашней странице моего сайта.

Понравился вопрос? Нужен ответ? Поддержите проект
WPAsk
Ответов: 5
  1. Sagive SEO

    Вы можете использовать это … Установить количество сообщений, которые вам нужны …

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

    <?php  
        $allcats = get_categories('child_of=0'); 
    
        foreach ($allcats as $cat) :
            $args = array(
                'posts_per_page' => 3, // set number of post per category here
                'category__in' => array($cat->term_id)
            );
    
            $customInCatQuery = new WP_Query($args);
    
            if ($customInCatQuery->have_posts()) :
                echo '<div>';
                echo '<h3>'.$cat->name.'</h3>';
                echo '<ul>';
                while ($customInCatQuery->have_posts()) : $customInCatQuery->the_post(); ?>
    
                <li><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></li>
            <?php
                endwhile; 
                echo '</ul></div>'; 
            ?>
    
    <?php
            else :
                echo 'No post published in:'.$cat->name;                
            endif; 
            wp_reset_query();
        endforeach; 
    ?>
    

    Надеюсь это поможет.

  2. Webord

    Я использую довольно часто следующий код. Вы можете использовать слаги, ID или термины объекта в массиве $Categories , если нужно получить все категории. Но будьте осторожны, в этом коде нет обработки иерархии.

    $categories = array( 1, 'slug', 3 );
    echo '<ul>';
    foreach($categories as $category) {
        $term = ( is_numeric($category) || is_object($category) ? get_term( $category, 'category' ) : get_term_by( 'slug', $category, 'category' ) );
        $args = array(
            'cat' => $term->term_id
            // Добавьте любые другие аргументы, чтобы соответствовать вашим потребностям
        );
        $q = new WP_Query( $args );
        if( $q->have_posts() ) {
            echo '<li><a href="' . get_term_link( $term->term_id, 'category' ) . '">' . $term->name . '</a><ul>';
            while( $q->have_posts() ) {
                $q->the_post();
                echo '<li><a href="' . get_permalink() . '">' . get_the_title() . '</a></li>';
            }
            echo '</ul></li>';
        } else {
    
        }
    }
    echo '</ul>';
    

  3. jasonflaherty

    Если вы ищете плагин, то может подойдет List Category Posts.

    Также посмотрите тег http://codex.wordpress.org/Template_Tags/get_posts

  4. Pieter Goosen

    Можете попробовать следующее

    В файле functions.php добавьте

    add_action( 'transition_post_status', 'publish_new_post', 10, 3 );
    
    function publish_new_post() {
       delete_transient( 'category_list' );
    }
    

    В вашем шаблоне, где вам нужно отобразить свой список

    <?php
    if ( false === ( $q = get_transient( 'category_list' ) ) ) {
    
        $args = array( 
            'posts_per_page' => -1
        );
    
        $query = new WP_Query($args); 
    
        $q = array();
    
        while ( $query->have_posts() ) { 
    
            $query->the_post(); 
    
            $a = '<a href="'. get_permalink() .'">' . get_the_title() .'</a>';
    
            $categories = get_the_category();
    
            foreach ( $categories as $key=>$category ) {
    
                $b = '<a href="' . get_category_link( $category ) . '">' . $category->name . '</a>';    
    
            }
    
            $q[$b][] = $a; // Создайте массив с именами категорий и заголовками сообщений
        }
    
    
        /* Восстановить исходные данные поста*/
        wp_reset_postdata();
    
    set_transient( 'category_list', $q, 12 * HOUR_IN_SECONDS );
    }
    
    foreach ($q as $key=>$values) {
            echo $key;
    
            echo '<ul>';
                foreach ($values as $value){
                    echo '<li>' . $value . '</li>';
                }
            echo '</ul>';
        }
    
    
    ?>
    
  5. nikhil gadhiya

    Попробуйте этот код

    $cat_ids=array();
    foreach (get_categories() as $cat)
    {
        array_push($cat_ids, $cat->cat_ID);
    }
    $the_query = new WP_Query(array('post_type'=>'post', array('category__and' => $cat_ids) ) );
    if( $the_query->have_posts() ): 
        while ( $the_query->have_posts() ) : $the_query->the_post(); 
            echo the_title();
        endwhile;
    endif; 
    wp_reset_query();
    
Добавить ответ

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: