wordpress短代码如何根据自定义分类过滤?

时间:2015-09-19 11:03:40

标签: wordpress taxonomy shortcode

我创建了一个自定义帖子类型(学校)和附加到它的自定义分类(区域)。 一切都很好,除了我想创建一个短代码,只能获得属于该自定义分类中特定条目的学校。 这意味着当您编写短代码时,您将传递区域名称,并且只有属于该区域的学校才会从数据库返回。 我设法使用短代码,但不根据区域进行过滤。

这是我的定训分类:

                $taxonomies['regions'] = array(
                'hierarchical' => true,
                'query_var' => 'school_region',
                'rewrite' => array(
                    'slug' => 'schools/region'
                    ),
                    'labels' => array(
                        'name' => __('Region'),
                        'singular_name' => __('Region'),
                        'add_new' => __('Add New Region'),
                        'add_new_item' => __('Add New Region'),
                        'edit_item' => __('Edit Region'),
                        'new_item' => __('Add New Region'),
                        'view_item' => __('View Region'),
                        'search_items' => __('Search Regions'),
                        'not_found' => __('No Region Found'),
                        'not_found_in_trash' => __('No Regions Found In Trash'),
                ),
            );

这是我的短代码:

add_shortcode('rs_school',function($atts, $content=null){



$loop = new WP_Query( array( 
    'post_type' => 'rs-school', 
    'posts_per_page' => -1,
    'orderby' => 'date', 
    'order' => 'DESC', 
) );
//var_dump($loop);

if($loop->have_posts() ){ ?>

<ul class="related">
    <?php

    while ($loop->have_posts()) {
        $loop->the_post();
        //$meta = get_post_meta(get_the_ID(), ''); 
        $terms = get_the_terms( $post->ID , 'regions' );
        var_dump($terms);
        if (in_array($theregion, $terms)){
        ?>
        <li>
            <a href="<?php the_permalink() ?>"><?php echo get_the_title() ?></a>
        </li>



    <?php   
        }
    } ?>
   </ul>
   <div class="clearfix"></div>
    <?php
}

});

我该怎么做?

最好的问候

1 个答案:

答案 0 :(得分:0)

所以设法解决了这个问题。所以希望能帮助别人:

我将术语id发送到短代码,然后使用它来填充它:

$atts = shortcode_atts(
    array(
        'region' => 15,
    ), $atts, 'rs_school' );

然后像这样过滤它:

    $loop = new WP_Query( array( 
    'post_type' => 'rs-school', 
    'posts_per_page' => -1,
    'orderby' => 'date', // Purely optional - just for some ordering
    'order' => 'DESC', // Ditto
    'tax_query' => array( 
            array( 
                'taxonomy' => 'regions', //or tag or custom taxonomy
                'field' => 'id', 
                'terms' => $atts['region'] 
            ) 
        ) 
) );

希望它能帮助别人。