You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

请求修改WordPress Archive Widget,仅展示当前分类文章并注册新组件

自定义WordPress归档组件:分类关联式月份归档跳转

以下代码可添加到你的WordPress子主题functions.php中,创建一个全新的「分类关联归档」小工具,实现需求:在分类页面点击归档月份时,自动跳转到携带当前分类category_name参数的日期归档页面。

<?php
// 自定义分类关联归档小工具类,继承默认归档组件
class Category_Linked_Archives_Widget extends WP_Widget_Archives {

    public function __construct() {
        $widget_ops = array(
            'classname' => 'category-linked-archives-widget',
            'description' => '显示关联当前分类的月份归档',
            'customize_selective_refresh' => true,
        );
        parent::__construct('category-linked-archives', __('分类关联归档'), $widget_ops);
    }

    // 重写组件渲染逻辑,修改归档链接参数
    public function widget($args, $instance) {
        $show_post_count = !empty($instance['count']);
        $dropdown = !empty($instance['dropdown']);

        echo $args['before_widget'];
        if (!empty($instance['title'])) {
            echo $args['before_title'] . apply_filters('widget_title', $instance['title'], $instance, $this->id_base) . $args['after_title'];
        }

        // 获取当前页面的分类对象
        $current_category = get_queried_object();
        $category_slug = is_category() && !empty($current_category->slug) ? $current_category->slug : '';

        if ($dropdown) {
            $dropdown_id = "{$this->id_base}-dropdown-{$this->number}";
            ?>
            <label class="screen-reader-text" for="<?php echo esc_attr($dropdown_id); ?>"><?php echo __('归档'); ?></label>
            <select id="<?php echo esc_attr($dropdown_id); ?>" name="archive-dropdown" onchange='document.location.href=this.options[this.selectedIndex].value;'>
                <option value=""><?php echo __('选择月份'); ?></option>
                <?php
                wp_get_archives(array(
                    'type' => 'monthly',
                    'format' => 'option',
                    'show_post_count' => $show_post_count,
                    'echo' => 1,
                    'add_args' => array('category_name' => $category_slug)
                ));
                ?>
            </select>
            <?php
        } else {
            ?>
            <ul>
                <?php
                wp_get_archives(array(
                    'type' => 'monthly',
                    'show_post_count' => $show_post_count,
                    'echo' => 1,
                    'add_args' => array('category_name' => $category_slug)
                ));
                ?>
            </ul>
            <?php
        }

        echo $args['after_widget'];
    }
}

// 注册自定义小工具
add_action('widgets_init', function() {
    register_widget('Category_Linked_Archives_Widget');
});
?>

关键说明

  1. 复用基础功能:基于官方默认的WP_Widget_Archives扩展,保留原归档组件的样式、计数、下拉/列表模式等所有基础特性
  2. 自动适配分类页面:通过get_queried_object()识别当前分类,仅在分类页面时自动追加category_name参数
  3. 独立组件不冲突:新组件名为「分类关联归档」,可在后台「外观→小工具」中找到并启用,完全替代原归档组件即可

注意事项

  • 必须添加到子主题的functions.php中,避免主题更新导致代码丢失
  • 确保WordPress固定链接设置为含日期的格式(如/%year%/%monthnum%/),否则日期归档URL格式会不符合预期
  • 若需仅对「Acts」分类生效,可将is_category()修改为is_category('acts')

内容的提问来源于stack exchange,提问作者Damir Loncaric

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.09 10:15:27