Custom Taxonomy Filter Issues

时间:2013-09-17 作者:RoseCoder

我有一个带有一些自定义分类法的自定义帖子类型,我正在使用一段代码,使用下拉菜单在主编辑页上根据分类法过滤帖子,效果很好,但我发现,当我单击分类法的主页,并单击包含特定术语的帖子数量时,它会显示“尝试获取非对象的属性”,而不会过滤它们。这是导致me问题的代码:

function taxonomy_filter_post_type_request( $query ) {
  global $pagenow, $typenow;

  if ( \'edit.php\' == $pagenow ) {
    $filters = get_object_taxonomies( $typenow );
      foreach ( $filters as $tax_slug ) {
        $var = &$query->query_vars[$tax_slug];
          if ( isset( $var ) ) {
           $term = get_term_by( \'id\', $var, $tax_slug );
            if($var){
             $var = $term->slug;
           }
        }
     }
  }
}

add_filter( \'parse_query\', \'taxonomy_filter_post_type_request\' );
读取$var=$term->slug的行;似乎是导致问题的原因,但如果我更换:

if($var){
  $var = $term->slug;
}
收件人:

if(is_array($var)){
  $var = $term->slug;
}
然后,当我单击包含某个术语的帖子数量时,它就会工作,但下拉菜单过滤器无法工作。

通过观察这一点,是否有可能使它们都起作用?

1 个回复
SO网友:david.binda

我认为问题在于这一行:

$var = &$query->query_vars[$tax_slug];
&$不需要查询,应启用simle$查询
  • $query->query->vars[$tax\\u slug]返回的不是术语的ID,而是术语的slug

    $term = get_term_by( \'id\', $var, $tax_slug );
    
    应更改为

    $term = get_term_by( \'slug\', $var, $tax_slug );
    
    但这并不是必须的,因为你想得到一颗子弹。

    此外,请注意。“Category”和“Post tag”分类法不以“Category”和“tag”的形式出现,而是以“Category\\u name”和“tag”的形式存储,因此您必须在foreach循环中相应地转换$tax\\u slug。例如:

    $tax_slug_original = $tax_slug;
    if( $tax_slug == \'category\' ){
        $tax_slug = \'category_name\';        
    }
    if( $tax_slug == \'post_tag\' ){
        $tax_slug = \'tag\';          
    }
    $var = $query->query_vars[$tax_slug];  
    $tax_slug = $tax_slug_original;
    

  • 结束

    相关推荐

    Apply_Filters()和_Excerpt提供了意外的结果

    我觉得我一定错过了一些显而易见的东西,但我似乎无法让WordPress合作。我正在用一个函数生成Facebook OG标签。除了摘录,一切都很好。自get_the_excerpt($post->ID), 有没有其他方法可以创建摘录而不必创建一个全新的循环?我觉得这太过分了。我的第一反应是apply_filters():$description = apply_filters(\'the_excerpt\', get_post($post->ID)->post_content);