出于某种原因,我发现使用自定义分类法来获取任何帖子都很麻烦...任何人都可以解开我的愚蠢吗?

 $args = array(
    'post_type' => 'adverts',
    'advert_tag' => 'politics' // Doesn't seem to work.
  );

query_posts($args); 

while ( have_posts() ) : the_post();
 //Show Posts
endwhile;


分类声明:

add_action( 'init', 'add_custom_taxonomy', 0 );
function add_custom_taxonomy() {
register_taxonomy('advert_tag', 'Adverts', array(
  'hierarchical' => true,
  'labels' => array(
    'name' => _x( 'Advert Tags', 'taxonomy general name' ),
    'singular_name' => _x( 'Advert Tag', 'taxonomy singular name' ),
    'search_items' =>  __( 'Search Advert Tags' ),
    'all_items' => __( 'All Advert Tags' ),
    'parent_item' => __( 'Parent Advert Tag' ),
    'parent_item_colon' => __( 'Parent Advert Tag:' ),
    'edit_item' => __( 'Edit Advert Tag' ),
    'update_item' => __( 'Update Advert Tag' ),
    'add_new_item' => __( 'Add New Advert Tag' ),
    'new_item_name' => __( 'New Advert Tag Name' ),
    'menu_name' => __( 'Advert Tags' ),
  ),
  'rewrite' => array(
    'slug' => 'advert-tags',
    'with_front' => false,
    'hierarchical' => true
  ),
));
  }


自定义帖子类型声明:

  add_action( 'init', 'create_post_type' );
  function create_post_type() {
    register_post_type( 'Adverts',
    array(
        'labels' => array(
            'name' => __( 'Adverts' ),
            'singular_name' => __( 'Advert'),
            'add_new' => __( 'Add New' ),
            'add_new_item' => __( 'Add a New Advert' ),
            'edit' => __( 'Edit' ),
            'edit_item' => __( 'Edit Advert' ),
            'new_item' => __( 'New Advert' ),
            'view' => __( 'View' ),
            'view_item' => __( 'View Advert' ),
            'search_items' => __( 'Search Adverts' ),
            'not_found' => __( 'No Adverts found' ),
            'not_found_in_trash' => __( 'No Adverts found in Trash' ),
            ),
        'supports' => array(
                'title',
                'thumbnail',
            ),
        'has_archive' => true,
        'menu_position' => 10,
        'public' => true,
        'rewrite' => array( 'slug' => 'adverts' ),
        'taxonomies' => array('advert_tag')
    )
);


}

#1 楼

所有人都不使用query_posts(),请在此处详细了解:何时应该使用WP_Query vs query_posts()vs get_posts()?。

您必须使用WP_Query来获取所需的帖子。阅读文档。在您的情况下,查询可能是这样的:

$the_query = new WP_Query( array(
    'post_type' => 'Adverts',
    'tax_query' => array(
        array (
            'taxonomy' => 'advert_tag',
            'field' => 'slug',
            'terms' => 'politics',
        )
    ),
) );

while ( $the_query->have_posts() ) :
    $the_query->the_post();
    // Show Posts ...
endwhile;

/* Restore original Post Data 
 * NB: Because we are using new WP_Query we aren't stomping on the 
 * original $wp_query and it does not need to be reset.
*/
wp_reset_postdata();


评论


只是注意到,它似乎拉出了所有自定义帖子类型为“广告”的帖子。但这似乎可以完成工作:$ the_query = new WP_Query(array('post_type'=>'Adverts','advert_tag'=>'politics'));

–斯蒂芬
13年2月7日在14:21

@Stephen {tax}从3.1版开始被弃用,而引入了{tax_query}和{tax_query}。这仍然有效,但我们不应该使用不推荐使用的功能。 tax_query与一组分类学查询一起使用。我正在研究FAQs Custom Post类型,它对我的​​作用与WP_Query中的{tax}分类标准子句参数几乎相同。

– Aamer Shahzad
15年11月19日在20:56



#2 楼

我正在使用此查询来获取具有其自定义分类法(faq_category)的自定义帖子(常见问题解答帖子)。因为自v.3.1起不推荐使用WP_Query args中的{taxonomy}参数,并引入了{tax_query}。下面是完美工作的代码。

$query = new WP_Query( array(
    'post_type' => 'faqs',          // name of post type.
    'tax_query' => array(
        array(
            'taxonomy' => 'faq_category',   // taxonomy name
            'field' => 'term_id',           // term_id, slug or name
            'terms' => 48,                  // term id, term slug or term name
        )
    )
) );

while ( $query->have_posts() ) : $query->the_post();
    // do stuff here....
endwhile;

/**
 * reset the orignal query
 * we should use this to reset wp_query
 */
wp_reset_query();


评论


这是正确的答案-接受的答案将不会按分类法进行过滤,因为tax_query需要数组数组。此嵌套方法对于使其正常工作至关重要。感谢您的回答 )

–汤姆·代尔(Tom Dyer)
16年7月28日在21:36

是的,你是对的,欢迎汤姆·代尔

– Aamer Shahzad
16年8月18日在21:11

是的,这也帮助我使分类模板工作。谢谢!

–user3135691
18年2月16日在10:34

嘿@AamerShahzad我有完全相同的问题,我用了您的答案,但是页面没有任何文章。你能帮我吗? stackoverflow.com/questions/55783769/…

– Desi
19年4月21日在21:34

#3 楼

这里的代码就像魔术一样工作。我正在获取具有自定义分类法“ unit_type”和多个分类法术语(如“主管”和“办公室”)的自定义post_type“ university_unit”的所有帖子。
希望对您有所帮助。

<?php
$args = array(
    'post_type' => 'university_unit',
    'posts_per_page' => -1,
    'orderby' => 'title',
    'order' => 'ASC',
    'tax_query' => array(

        array(
            'taxonomy' => 'unit_type',
            'field' => 'slug',
            'terms' => array('directorate', 'office')
        )

    )
);

$Query = new WP_Query($args);
if($Query -> have_posts()):

    while($Query -> have_posts()):
        $Query -> the_post();
        ?>
        <div class="cm-post-list-item">
            <article>
                <div class="cm-post-head">
                    <h3 class="cm-text-blue">
                        <a href="<?php the_permalink(); ?>"><?php the_title();?></a>
                    </h3>
                </div>
                <div class="cm-post-body"><?php the_excerpt();?></div>
            </article>
        </div>
        <?php
    endwhile;

else:
    "No Administrative Offices Found. Try again later";
endif;
wp_reset_postdata();
?>


#4 楼

这有助于我获得每个术语下针对CPT的自定义分类法列出的所有帖子

    <?php
    // Get list of all taxonomy terms  -- In simple categories title
    $args = array(
                'taxonomy' => 'project_category',
                'orderby' => 'name',
                'order'   => 'ASC'
            );
    $cats = get_categories($args);

    // For every Terms of custom taxonomy get their posts by term_id
    foreach($cats as $cat) {
        ?>
        <a href="<?php echo get_category_link( $cat->term_id ) ?>">
            <?php echo $cat->name; ?> <br>
            <?php // echo $cat->term_id; ?> <br>
        </a>


            <?php
                // Query Arguments
                $args = array(
                    'post_type' => 'portfolio', // the post type
                    'tax_query' => array(
                        array(
                            'taxonomy' => 'project_category', // the custom vocabulary
                            'field'    => 'term_id',          // term_id, slug or name  (Define by what you want to search the below term)    
                            'terms'    => $cat->term_id,      // provide the term slugs
                        ),
                    ),
                );

                // The query
                $the_query = new WP_Query( $args );

                // The Loop
                if ( $the_query->have_posts() ) {
                    echo '<h2> List of posts tagged with this tag </h2>';

                    echo '<ul>';
                    $html_list_items = '';
                    while ( $the_query->have_posts() ) {
                        $the_query->the_post();
                        $html_list_items .= '<li>';
                        $html_list_items .= '<a href="' . get_permalink() . '">';
                        $html_list_items .= get_the_title();
                        $html_list_items .= '</a>';
                        $html_list_items .= '</li>';
                    }
                    echo $html_list_items;
                    echo '</ul>';

                } else {
                    // no posts found
                }

                wp_reset_postdata(); // reset global $post;

                ?>

    <?php } ?>


#5 楼

由于wordpress更改了其分类参数信息,因此该答案现在不再有效。请使用这种方式。会的。这个对我有用。 “ tax_query”替换为“ tax”。希望它能工作。

$the_query = new WP_Query( array(
    'post_type' => 'Adverts',
    'tax' => array(
        array (
            'taxonomy' => 'advert_tag',
            'field' => 'slug',
            'terms' => 'politics',
        )
    ),
) );

while ( $the_query->have_posts() ) :
    $the_query->the_post();
    // Show Posts ...
endwhile;

/* Restore original Post Data 
 * NB: Because we are using new WP_Query we aren't stomping on the 
 * original $wp_query and it does not need to be reset.
*/
wp_reset_postdata();


评论


恰恰相反-税收是旧方法,tax_query是当前(v3.1 +)方法。

– WebElaine
19年1月3日,22:50

好吧,我正在使用v4.5,它可以与我一起使用

– mamunuzaman
19年1月5日,12:22



WP以向后兼容而闻名。旧的方法仍然有效,但是已经过时了,因此最终可能会删除它,使用新方法更安全。

– WebElaine
19年1月7日在13:40

是,现在从税收更改为tay_query。

– mamunuzaman
19/12/11在10:58