首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >是否从wp_get_archives中排除类别?

是否从wp_get_archives中排除类别?
EN

Stack Overflow用户
提问于 2010-05-07 22:19:52
回答 9查看 9.4K关注 0票数 3

有没有办法从wp_get_archives中排除一个类别?我试图在侧边栏中显示月份,但我想排除不是博客条目的帖子。

代码语言:javascript
运行
复制
$catID = get_cat_id('Projects');
$variable = wp_get_archives('type=monthly&show_post_count=1);
echo $variable;
EN

回答 9

Stack Overflow用户

发布于 2011-05-12 16:22:30

如果只想在主题目录的functions.php中包含wp_get_archive函数的特定类别,请使用此选项

代码语言:javascript
运行
复制
add_filter( 'getarchives_where', 'customarchives_where' );
add_filter( 'getarchives_join', 'customarchives_join' );

function customarchives_join( $x ) {

    global $wpdb;

    return $x . " INNER JOIN $wpdb->term_relationships ON ($wpdb->posts.ID = $wpdb->term_relationships.object_id) INNER JOIN $wpdb->term_taxonomy ON ($wpdb->term_relationships.term_taxonomy_id = $wpdb->term_taxonomy.term_taxonomy_id)";

}

function customarchives_where( $x ) {

    global $wpdb;

    $includes= '14'; // category id to include
    return $x . " AND $wpdb->term_taxonomy.taxonomy = 'category' AND $wpdb->term_taxonomy.term_id = '$includes'";

}
票数 5
EN

Stack Overflow用户

发布于 2011-05-10 13:50:43

您可以在您的functions.php文件中编写一个过滤器,它将更改wp_get_archive函数的默认行为。

代码语言:javascript
运行
复制
add_filter( 'getarchives_where', 'customarchives_where' );
add_filter( 'getarchives_join', 'customarchives_join' );

function customarchives_join( $x ) {

    global $wpdb;

    return $x . " INNER JOIN $wpdb->term_relationships ON ($wpdb->posts.ID = $wpdb->term_relationships.object_id) INNER JOIN $wpdb->term_taxonomy ON ($wpdb->term_relationships.term_taxonomy_id = $wpdb->term_taxonomy.term_taxonomy_id)";

}

function customarchives_where( $x ) {

    global $wpdb;

    $exclude = '1'; // category id to exclude

    return $x . " AND $wpdb->term_taxonomy.taxonomy = 'category' AND $wpdb->term_taxonomy.term_id NOT IN ($exclude)";

}
票数 2
EN

Stack Overflow用户

发布于 2012-07-12 01:27:33

在一个项目中遇到了这个问题,但从未在网上找到解决方案--我的PHP不是最漂亮的,但它可以解决这个问题。

这是Katie建议的过滤器,我也在一些支持论坛中遇到过。这将放入你的functions.php

代码语言:javascript
运行
复制
add_filter( 'getarchives_where', 'customarchives_where' );
add_filter( 'getarchives_join', 'customarchives_join' );

function customarchives_join( $x ) {

    global $wpdb;

    return $x . " INNER JOIN $wpdb->term_relationships ON ($wpdb->posts.ID = $wpdb->term_relationships.object_id) 
    INNER JOIN $wpdb->term_taxonomy ON ($wpdb->term_relationships.term_taxonomy_id = $wpdb->term_taxonomy.term_taxonomy_id)";

}

function customarchives_where( $x ) {

    global $wpdb;

    $categories = get_terms( 'taxonomy-name', 'orderby=id' );
    $includeIds;
    $i = 0;
    foreach($categories as $category) {
        if($i != 0) $includeIds .= ',';
        $includeIds .= $category->term_id;
        $i++;
    } 


    return $x . " AND $wpdb->term_taxonomy.taxonomy = 'taxonomy-name' 
    AND $wpdb->term_taxonomy.term_id IN ($includeIds)";

}

在第二个函数中,将taxonomy-name替换为实际的自定义分类法的名称。

定制分类中的所有术语ID都被捕获在一个字符串中;其余的操作与原始函数相同--只有定制分类中的类别列表包含在wp_get_archives()列表中。您还可以调整代码以排除它们(上面的第一个示例)。

如果只想让wp_get_archives()列表的一个实例执行此操作,只需跳过functions.php中应用过滤器的前两行代码。然后,当您使用wp_get_archives()标记时,在它之前应用滤镜,然后删除它们:

代码语言:javascript
运行
复制
<?php   
add_filter( 'getarchives_where', 'customarchives_where' );
    add_filter( 'getarchives_join', 'customarchives_join' );

    wp_get_archives(); 

    remove_filter( 'getarchives_where', 'customarchives_where' );
    remove_filter( 'getarchives_join', 'customarchives_join' );
?>
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2789228

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档