如何在自定义插件中设置分类?

时间:2017-02-17 12:56:25

标签: wordpress

我正在尝试创建一个插件,我需要一个自定义帖子和分类。但它可以在管理员方面访问,但分类标准不适用于前端。

这是我注册自定义帖子和分类的方式:

function post_type_questionnaire()
{
    $labels = array(
        'name' => _x('Questionnaire', 'post type general name'),
        'singular_name' => _x('Questionnaire', 'post type singular name'),
        'add_new' => _x('Add New Question', 'questionnaire'),
        'add_new_item' => __('Add New Questionnaire')
    );

     $args = array(
        'labels' => $labels,
    'public' => true,
    'publicly_queryable' => true,
    'show_ui' => true,
    'query_var' => true,
    'rewrite' => true,
        '_builtin' => false, // It's a custom post type, not built in!
    'capability_type' => 'post',
    'hierarchical' => false,
    'menu_position' => null,
        'supports' => array('title',
                            //'editor',
                            /*'excerpt',
                            'thumbnail',
                            'trackbacks',
                            'custom-fields',
                            'comments',
                            'revisions',
                            'author',
                            'page-attributes'*/
    ));

    register_post_type('questionnaire',$args);

}
add_action('init', 'post_type_questionnaire');



function create_questionnaire_taxanomies(){
    register_taxonomy('qcategories','questionnaire', array(
        'hierarchical'=>true,
        'label'=>'Questionnaire Categories',
        'rewrite' => array( 'slug' => 'questionnaire' )
    ));
}

add_action('init', 'create_questionnaire_taxanomies',0);

我正在使用短代码在前端显示它。

使用下面的代码显示所有帖子

$args = array(
    'post_type' => 'questionnaire',
    'posts_per_page' => -1,
 );
 $query = new WP_Query($args);
 if ( $query->have_posts() ) { ?>
 <?php while ( $query->have_posts() ) :query->the_post(); ?>

但是,当我尝试指定分类术语时,它不起作用,这就是代码:

  $args = array(
    'post_type' => 'questionnaire',
    'posts_per_page' => -1,
    'tax_query' => array(
        array(
            'taxonomy' => 'qcategories',
            'field'    => 'slug',
            'terms'     => $atts["name"]
        )
    )
);
$query = new WP_Query($args);
if ( $query->have_posts() ) { ?>
<?php while ( $query->have_posts() ) : $query->the_post(); ?>

当我试图在模板页面中显示帖子的数量时,它什么都没显示:

 $term = get_term( 3, 'qcategories' );
 echo $term->count;

这没有输出,所以我认为分类法没有注册,任何人都可以帮我在我的自定义插件中注册分类法。提前谢谢!

被修改

这是$ args:

的输出
array (size=3)
  'post_type' => string 'questionnaire' (length=13)
  'posts_per_page' => int -1
  'tax_query' => 
    array (size=1)
      0 => 
        array (size=3)
          'taxonomy' => string 'qcategories' (length=11)
          'field' => string 'slug' (length=4)
          'terms' => string 'new' (length=3)

1 个答案:

答案 0 :(得分:2)

看起来代码很好,因为OP发现代码中只有一点疏忽,即在注册分类法之前的插件中有WordPress模板标记if(is_admin()),这导致代码在Admin中工作得很好小组,但是当它在前端调用时,WP_QUERY没有可用的分类法

删除admin_only if条件,代码才能正常工作。