Получение записей из произвольной таксономии

16 окт. 2014 г., 19:31:09
Просмотры: 183K
Голосов: 43

Я не могу получить записи из произвольной таксономии (fabric_building_types). Я получаю cat_id и cat->name, но не могу получить сами записи.

$args = array(
    'type'                     => 'post',
    'child_of'                 => 0,
    'parent'                   => '',
    'orderby'                  => 'name',
    'order'                    => 'ASC',
    'hide_empty'               => 1,
    'hierarchical'             => 1,
    'exclude'                  => '',
    'include'                  => '',
    'number'                   => '',
    'taxonomy'                 => 'fabric_building_types',
    'pad_counts'               => false 
); 

$categories = get_categories( $args );

foreach ( $categories as $cat ) {

    // вот мой код для получения записей произвольного типа

    $posts_array = get_posts(
        array(
            'showposts' => -1,
            'post_type' => 'fabric_building',
            'tax_query' => array(
                array(
                    'taxonomy' => 'fabric_building_types',
                    'field' => $cat->cat_ID,
                    'terms' => $cat->name,
                )
            )
        )
    );
    print_r( $posts_array ); 
}

Может кто-нибудь помочь... Заранее спасибо

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

допустимые значения для field в tax query: term_id, name или slug.

Milo Milo
16 окт. 2014 г. 20:23:42
Все ответы на вопрос 4
1
81

Ваш налоговый запрос некорректен, field должен указывать поле, по которому производится запрос: term_id, name или slug -

$posts_array = get_posts(
    array(
        'posts_per_page' => -1,
        'post_type' => 'fabric_building',
        'tax_query' => array(
            array(
                'taxonomy' => 'fabric_building_types',
                'field' => 'term_id',
                'terms' => $cat->term_id,
            )
        )
    )
);
16 окт. 2014 г. 20:35:08
Комментарии

как разбить эти записи на страницы после их получения?

Andreas Hunter Andreas Hunter
28 сент. 2018 г. 14:11:03
3

Для работы с таксономиями рекомендуется использовать функцию get_terms().

<?php 
/* Добавьте вашу таксономию. */
$taxonomies = array( 
    'fabric_building_types',
);

$args = array(
    'orderby'           => 'name', 
    'order'             => 'ASC',
    'hide_empty'        => true, 
    'exclude'           => array(), 
    'exclude_tree'      => array(), 
    'include'           => array(),
    'number'            => '', 
    'fields'            => 'all', 
    'slug'              => '', 
    'parent'            => '',
    'hierarchical'      => true, 
    'child_of'          => 0, 
    'get'               => '', 
    'name__like'        => '',
    'description__like' => '',
    'pad_counts'        => false, 
    'offset'            => '', 
    'search'            => '', 
    'cache_domain'      => 'core'
); 

$terms = get_terms( $taxonomies, $args );
foreach ( $terms as $term ) {

// здесь мой код для получения записей пользовательского типа поста

$posts_array = get_posts(
                        array( 'showposts' => -1,
                            'post_type' => 'fabric_building',
                            'tax_query' => array(
                                array(
                                'taxonomy' => 'fabric_building_types',
                                'field' => 'term_id',
                                'terms' => $term->term_id,
                                )
                            )
                        )
                    );
    print_r( $posts_array ); 
}
?>

Ссылка на Codex: http://codex.wordpress.org/Function_Reference/get_terms

16 окт. 2014 г. 20:16:17
Комментарии

Спасибо... но проблема остается той же - пустой массив.. это из-за того, что я неправильно определяю пользовательский тип записи, раз я получаю массив терминов..

Parth Kumar Parth Kumar
16 окт. 2014 г. 20:37:40

Вы уже пробовали обновленный код выше?

Courtney Ivey Courtney Ivey
16 окт. 2014 г. 20:48:45

Собственно, как и предложил Мило, поле принимает строку.. в этом и была ошибка.. которую я исправил..

Parth Kumar Parth Kumar
16 окт. 2014 г. 20:50:54
0
global $post; $id = $post->ID;

// Получаем категории текущего поста
$cat = get_the_category($id);
// Получаем термины таксономии для текущего поста  
$loc = get_the_terms($id, 'taxonomy');
// Получаем список постов с учетом категории и таксономии
$posts = get_posts(
array('post_type' => 'post',
    'post_status' => 'publish', 
    'posts_per_page' => -1, 
    'category' => $cat[0]->term_id, 
    'tax_query' => array(
        array(
            'taxonomy' => 'location',
            'field' => 'id',
            'terms' => $loc[0]->term_id,
        )
    )
)
);
// Выводим массив найденных постов
print_r($posts);

Это должно работать.

14 сент. 2016 г. 05:59:20
0

Получение записей, связанных с текущей таксономией

Вы можете добавить следующий код в файл taxonomy-your_tax.php

<div class="a-article-wrapper">

                <?php 

                    $terms = wp_get_post_terms( $post->ID, 'your-taxonomy'); 
                    $terms_ids = [];

                    foreach ( $terms as $term ) {
                        $terms_ids[] = $term->term_id;
                    }

                    $args = array(
                        'post_type' => 'your-post-type',
                        'tax_query' => array(
                            'relation' => 'AND',
                            array(
                                'taxonomy' => 'your-taxonomy',
                                'field'    => 'term_id',
                                'terms'    => $terms_ids
                            )
                        ),
                    );

                    $query = new WP_Query($args);
                    if ( $query->have_posts() ) {
                        while ( $query->have_posts() ) {
                    ?>

                     <div class="row">
                        <div class="col-md-8 a-article-row">
                            <div class="row">
                                <?php $query->the_post();?>
                                <div class="a-post-time">
                                    <span class="a-current-date"><?php the_time('j F, D') ?></span>
                                    <span class="a-current-time"><?php the_time('g:i a') ?></span>
                                </div>
                                <div class="a-article-title">
                                    <?php the_title(); ?> 
                                </div>
                                <div class="a-article-content">
                                    <div id="excerpt"><?php the_excerpt(); ?></div>

                                    <?php the_content(); ?>
                                </div>
                                <div class="a-article-tags">
                                    <?php echo get_the_term_list( get_the_ID(), 'your-taxonomy', '', ',' ); ?>
                                </div>
                            </div>
                        </div>
                    </div>

                    <?php } } ?>
            </div> 
27 июн. 2018 г. 13:38:40