Цикл по пользовательским таксономиям и отображение записей

14 авг. 2010 г., 17:37:31
Просмотры: 63.1K
Голосов: 8

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

Я хотел бы организовать цикл по каждой пользовательской таксономии (в моем случае категории) и вывести определенное количество записей для каждой.

Пример желаемого вывода:

Категория 1

запись из категории один
запись из категории один

читать далее категорию один


Категория 2

запись из категории два
запись из категории два

читать далее категорию два

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

1
Комментарии

Я не совсем понимаю ваш вопрос. Когда вы спрашиваете "loop through each custom taxonomy", вы имеете в виду "перебирать термины каждой пользовательской таксономии?" Также, когда вы просите "produce a number of posts", означает ли "produce" создание новых записей типа поста в базе данных или генерацию HTML для этого типа записи?

MikeSchinkel MikeSchinkel
15 авг. 2010 г. 01:50:24
Все ответы на вопрос 4
0
12

Я решил предоставить еще один ответ, так как предыдущий был немного "костыльным". Также я добавил дополнительный уровень, который получает все таксономии для типа записи.

$post_type = 'post';

// Получаем все таксономии для этого типа записи
$taxonomies = get_object_taxonomies( (object) array( 'post_type' => $post_type ) );

foreach( $taxonomies as $taxonomy ) : 

    // Получаем все термины в этой таксономии, чтобы найти соответствующие записи
    $terms = get_terms( $taxonomy );

    foreach( $terms as $term ) : 

        $posts = new WP_Query( "taxonomy=$taxonomy&term=$term->slug&posts_per_page=2" );

        if( $posts->have_posts() ): while( $posts->have_posts() ) : $posts->the_post();
            // Здесь размещаем ваш стандартный цикл запросов  
        endwhile; endif;

    endforeach;

endforeach;

Рекомендуется добавлять каждую найденную запись в массив $post__not_in, чтобы затем передать его в WP_Query и избежать появления дублирующихся записей.

17 авг. 2010 г. 01:20:03
0

Вы ищете это?

<?php query_posts(array('post_type' => 'post type name', 'Taxonomy slug' => $term->slug ) ); ?>
<?php if ( have_posts() ) : while ( have_posts() ) : the_post(); ?>
<?php endwhile; else: ?>
<p><?php _e('Извините, нет записей, соответствующих вашему критерию.'); ?></p>
<?php endif; ?>

Как создать цикл для пользовательской таксономии

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

31 авг. 2012 г. 21:39:58
0

Скопируйте и вставьте эту функцию в ваш файл functions.php

if ( ! function_exists( 'display_all_products_from_all_categories' ) ) {

    function display_all_products_from_all_categories() {

        // Получаем все категории для произвольного типа записи "Товар"
        $args = array( 
            'post_type' => 'product', 
            'orderby' => 'id', 
            'order' => 'ASC' 
        );

        $categories = get_categories( $args );

        foreach ($categories as $category) {
            ?>
            <div class="<?php echo $category->slug; ?>">
                <!-- Выводим название категории -->
                <h3 class="title"><?php echo $category->name; ?></h3>

                <!-- Выводим описание категории -->
                <div class="description">
                    <p><?php echo category_description( get_category_by_slug($category->slug)->term_id ); ?></p>
                </div>

                <ul class="mhc-product-grid">

                    <?php
                        // Получаем все товары каждой конкретной категории
                        $product_args = array(
                            'post_type'     => 'product',
                            'orderby'      => 'id',
                            'order'         => 'ASC',
                            'post_status'   => 'publish',
                            'category_name' => $category->slug // передаем slug текущей категории
                        );

                        $product_list = new WP_Query ( $product_args );

                    ?>

                    <?php while ( $product_list -> have_posts() ) : $product_list -> the_post(); ?>

                        <li class="product <?php the_field( 'product_flavor' ); ?>">
                            <a href="<?php the_permalink(); ?>" class="product-link">

                                <!-- Если у записи есть изображение, выводим его -->
                                <?php if( has_post_thumbnail() ) : ?>
                                    <?php the_post_thumbnail( 'full', array( 'class' => 'img', 'alt' => get_the_title() ) ); ?>
                                <?php endif; ?>

                                <!-- Произвольные поля: product_flavor, product_description и т.д. -->
                                <h3 class="title <?php the_field( 'product_flavor' ); ?>"><?php the_title(); ?></h3>
                                <p class="description"><?php the_field( 'product_description' ); ?></p>
                            </a>
                        </li>

                    <?php endwhile; wp_reset_query(); ?>
                </ul>

            </div>
            <?php
        }
    }
}

Затем вызовите её из любого места вашего шаблона с помощью:

display_all_products_from_all_categories();

3 авг. 2016 г. 21:28:13
0
-1

Пожалуйста, ознакомьтесь с примером; создайте собственный цикл для вашей таксономии. Вы также можете использовать это в foreach-цикле для обработки всех категорий. Или вам нужно создать собственный SQL-запрос.

<?php
$taxonomies = get_the_term_list($post->ID, 'ВАША_ТАКСОНОМИЯ', '', '', '');
$taxonomies = explode('>', $taxonomies);
$taxonomies = $taxonomies[1];
$myq = new WP_Query('your_taxonomie = '.$taxonomies); 
if ($myq->have_posts()) : while ($myq->have_posts()) : $myq->the_post(); // начало цикла ?>

            <?php the_title();?>
            <?php the_content();?>

<?php endwhile; else:?>

<?php endif;?>
15 авг. 2010 г. 00:28:28