{"id":6693,"date":"2025-09-14T09:51:43","date_gmt":"2025-09-14T01:51:43","guid":{"rendered":"https:\/\/mynotes.org\/tech\/?p=6693"},"modified":"2025-09-14T09:54:21","modified_gmt":"2025-09-14T01:54:21","slug":"%e5%85%a8%e9%83%a8%e5%95%86%e5%93%81%e7%ae%a1%e7%90%86%e7%af%a9%e9%81%b8%e9%a0%81%e9%9d%a2","status":"publish","type":"post","link":"https:\/\/mynotes.org\/tech\/2025\/09\/14\/6693.htm","title":{"rendered":"\u5168\u90e8\u5546\u54c1\u7ba1\u7406\u7be9\u9078\u9801\u9762"},"content":{"rendered":"<p>\u518d\u5168\u90e8\u5546\u54c1\u7684\u7ba1\u7406\u9801\u9762\uff0c\u53ef\u4ee5\u7528\u6a19\u7c64\u7be9\u9078\u5546\u54c1\u3002<br \/>\n<!--more--><\/p>\n<pre escaped=\"true\" lang=\"php\">\r\n\r\n&lt;?php\r\n\/**\r\n * Plugin Name: WC Admin Filter Manager\r\n * Description: \u5728\u5f8c\u53f0\u300c\u5546\u54c1 \u2192 \u6240\u6709\u5546\u54c1\u300d\u9801\u63d0\u4f9b\u7ba1\u7406\u4ecb\u9762\uff1a\u53ef\u52fe\u9078\u79fb\u9664\uff08\u5546\u54c1\u985e\u578b\/\u5b58\u8ca8\u72c0\u614b\/\u54c1\u724c\/\u5546\u54c1\u5206\u985e\uff09\u7b49\u65e2\u6709\u7be9\u9078\uff1b\u4e26\u53ef\u65b0\u589e\u300c\u5546\u54c1\u6a19\u7c64\u300d\u7be9\u9078\u3002\r\n * Version:     1.2.0\r\n * Author:      (Your Name)\r\n * License:     GPL-2.0+\r\n * Text Domain: wc-admin-filter-manager\r\n *\/\r\n\r\nif ( ! defined( 'ABSPATH' ) ) exit;\r\n\r\nclass WC_Admin_Filter_Manager {\r\n    const OPT_KEY = 'wca_filter_manager';\r\n    public function __construct() {\r\n        \/\/ \u8a2d\u5b9a\u9801\r\n        add_action( 'admin_menu', [ $this, 'add_settings_page' ] );\r\n        add_action( 'admin_init', [ $this, 'register_settings' ] );\r\n\r\n        \/\/ \u5be6\u969b\u4f5c\u7528\u65bc\u5546\u54c1\u6e05\u55ae\r\n        add_filter( 'woocommerce_products_admin_list_table_filters', [ $this, 'maybe_remove_core_filters' ], 20 );\r\n        add_filter( 'woocommerce_product_filters', [ $this, 'maybe_strip_taxonomy_dropdowns' ], 20 );\r\n        add_action( 'restrict_manage_posts', [ $this, 'maybe_add_product_tag_dropdown' ], 20 );\r\n        add_filter( 'parse_query', [ $this, 'apply_product_tag_filter' ] );\r\n    }\r\n\r\n    \/** === \u8a2d\u5b9a\u9801 === *\/\r\n    public function add_settings_page() {\r\n        add_submenu_page(\r\n            'woocommerce',\r\n            __( '\u5f8c\u53f0\u5546\u54c1\u7be9\u9078\u7ba1\u7406', 'wc-admin-filter-manager' ),\r\n            __( '\u7be9\u9078\u7ba1\u7406', 'wc-admin-filter-manager' ),\r\n            'manage_woocommerce',\r\n            'wc-admin-filter-manager',\r\n            [ $this, 'render_settings_page' ]\r\n        );\r\n    }\r\n\r\n    public function register_settings() {\r\n        register_setting( 'wca_fm_group', self::OPT_KEY );\r\n        add_settings_section( 'wca_fm_section_main', '', '__return_false', 'wc-admin-filter-manager' );\r\n\r\n        add_settings_field(\r\n            'remove_filters',\r\n            __( '\u8981\u79fb\u9664\u7684\u7be9\u9078\uff08\u5f8c\u53f0\u300c\u6240\u6709\u5546\u54c1\u300d\u9801\uff09', 'wc-admin-filter-manager' ),\r\n            [ $this, 'field_remove_filters' ],\r\n            'wc-admin-filter-manager',\r\n            'wca_fm_section_main'\r\n        );\r\n\r\n        add_settings_field(\r\n            'add_filters',\r\n            __( '\u8981\u65b0\u589e\u7684\u7be9\u9078', 'wc-admin-filter-manager' ),\r\n            [ $this, 'field_add_filters' ],\r\n            'wc-admin-filter-manager',\r\n            'wca_fm_section_main'\r\n        );\r\n    }\r\n\r\n    public function get_options() {\r\n        $defaults = [\r\n            'remove_product_type' =&gt; 0,\r\n            'remove_stock_status' =&gt; 0,\r\n            'remove_brand'        =&gt; 0,\r\n            'remove_category'     =&gt; 0,\r\n            'add_product_tag'     =&gt; 1, \/\/ \u9810\u8a2d\u555f\u7528\u5546\u54c1\u6a19\u7c64\u7be9\u9078\r\n        ];\r\n        $saved = get_option( self::OPT_KEY, [] );\r\n        return wp_parse_args( is_array( $saved ) ? $saved : [], $defaults );\r\n    }\r\n\r\n    public function render_settings_page() {\r\n        if ( ! current_user_can( 'manage_woocommerce' ) ) {\r\n            return;\r\n        }\r\n        ?&gt;\r\n        &lt;div class=\"wrap\"&gt;\r\n            &lt;h1&gt;&lt;?php esc_html_e( '\u5f8c\u53f0\u5546\u54c1\u7be9\u9078\u7ba1\u7406', 'wc-admin-filter-manager' ); ?&gt;&lt;\/h1&gt;\r\n            &lt;form method=\"post\" action=\"options.php\"&gt;\r\n                &lt;?php\r\n                settings_fields( 'wca_fm_group' );\r\n                do_settings_sections( 'wc-admin-filter-manager' );\r\n                submit_button();\r\n                ?&gt;\r\n            &lt;\/form&gt;\r\n            &lt;p style=\"opacity:.8\"&gt;\r\n                &lt;?php esc_html_e('\u63d0\u793a\uff1a\u54c1\u724c\u7be9\u9078\u9700\u642d\u914d\u54c1\u724c taxonomy\uff08\u4f8b\u5982 WooCommerce Brands \u5916\u639b\u7684 product_brand\uff09\u3002\u82e5\u6c92\u6709\u8a72 taxonomy\uff0c\u672c\u9078\u9805\u4e0d\u6703\u6709\u4f5c\u7528\u3002', 'wc-admin-filter-manager'); ?&gt;\r\n            &lt;\/p&gt;\r\n        &lt;\/div&gt;\r\n        &lt;?php\r\n    }\r\n\r\n    public function field_remove_filters() {\r\n        $o = $this-&gt;get_options();\r\n        ?&gt;\r\n        &lt;label&gt;&lt;input type=\"checkbox\" name=\"&lt;?php echo esc_attr(self::OPT_KEY); ?&gt;[remove_product_type]\" value=\"1\" &lt;?php checked( $o['remove_product_type'], 1 ); ?&gt; \/&gt; &lt;?php esc_html_e('\u5546\u54c1\u985e\u578b', 'wc-admin-filter-manager'); ?&gt;&lt;\/label&gt;&lt;br\/&gt;\r\n        &lt;label&gt;&lt;input type=\"checkbox\" name=\"&lt;?php echo esc_attr(self::OPT_KEY); ?&gt;[remove_stock_status]\" value=\"1\" &lt;?php checked( $o['remove_stock_status'], 1 ); ?&gt; \/&gt; &lt;?php esc_html_e('\u5b58\u8ca8\u72c0\u614b', 'wc-admin-filter-manager'); ?&gt;&lt;\/label&gt;&lt;br\/&gt;\r\n        &lt;label&gt;&lt;input type=\"checkbox\" name=\"&lt;?php echo esc_attr(self::OPT_KEY); ?&gt;[remove_brand]\" value=\"1\" &lt;?php checked( $o['remove_brand'], 1 ); ?&gt; \/&gt; &lt;?php esc_html_e('\u54c1\u724c\u7be9\u9078', 'wc-admin-filter-manager'); ?&gt;&lt;\/label&gt;&lt;br\/&gt;\r\n        &lt;label&gt;&lt;input type=\"checkbox\" name=\"&lt;?php echo esc_attr(self::OPT_KEY); ?&gt;[remove_category]\" value=\"1\" &lt;?php checked( $o['remove_category'], 1 ); ?&gt; \/&gt; &lt;?php esc_html_e('\u5546\u54c1\u5206\u985e', 'wc-admin-filter-manager'); ?&gt;&lt;\/label&gt;\r\n        &lt;?php\r\n    }\r\n\r\n    public function field_add_filters() {\r\n        $o = $this-&gt;get_options();\r\n        ?&gt;\r\n        &lt;label&gt;&lt;input type=\"checkbox\" name=\"&lt;?php echo esc_attr(self::OPT_KEY); ?&gt;[add_product_tag]\" value=\"1\" &lt;?php checked( $o['add_product_tag'], 1 ); ?&gt; \/&gt; &lt;?php esc_html_e('\u5546\u54c1\u6a19\u7c64', 'wc-admin-filter-manager'); ?&gt;&lt;\/label&gt;\r\n        &lt;?php\r\n    }\r\n\r\n    \/** === \u4f5c\u7528\uff1a\u79fb\u9664\u6838\u5fc3\u7be9\u9078 === *\/\r\n    public function maybe_remove_core_filters( $filters ) {\r\n        $o = $this-&gt;get_options();\r\n\r\n        if ( ! empty( $o['remove_product_type'] ) &amp;&amp; isset( $filters['product_type'] ) ) {\r\n            unset( $filters['product_type'] );\r\n        }\r\n        if ( ! empty( $o['remove_stock_status'] ) &amp;&amp; isset( $filters['stock_status'] ) ) {\r\n            unset( $filters['stock_status'] );\r\n        }\r\n\r\n        \/\/ \u6709\u4e9b\u74b0\u5883\u4e0b\uff0c\u5206\u985e\/\u54c1\u724c\u4e5f\u53ef\u80fd\u51fa\u73fe\u5728\u6b64\u9663\u5217\uff0c\u76e1\u91cf\u8655\u7406\r\n        if ( ! empty( $o['remove_category'] ) ) {\r\n            foreach ( [ 'product_category', 'product_cat' ] as $k ) {\r\n                if ( isset( $filters[ $k ] ) ) unset( $filters[ $k ] );\r\n            }\r\n        }\r\n        if ( ! empty( $o['remove_brand'] ) ) {\r\n            foreach ( [ 'product_brand', 'brand' ] as $k ) {\r\n                if ( isset( $filters[ $k ] ) ) unset( $filters[ $k ] );\r\n            }\r\n        }\r\n\r\n        return $filters;\r\n    }\r\n\r\n    \/** === \u4f5c\u7528\uff1a\u5254\u9664 taxonomy \u4e0b\u62c9\uff08\u5206\u985e\/\u54c1\u724c\uff09 ===\r\n     * WooCommerce \u6703\u900f\u904e woocommerce_product_filters \u5370\u51fa HTML \u5b57\u4e32\uff08\u5305\u542b\u5546\u54c1\u5206\u985e\u3001\u8996\u9700\u6c42\u4e5f\u53ef\u80fd\u5305\u542b\u54c1\u724c\uff09\u3002\r\n     * \u9019\u88e1\u7528\u7c21\u55ae\u7684\u5b57\u4e32\/\u6b63\u5247\u628a\u4e0d\u9700\u8981\u7684\u4e0b\u62c9\u79fb\u9664\u3002\r\n     *\/\r\n    public function maybe_strip_taxonomy_dropdowns( $output ) {\r\n        $o = $this-&gt;get_options();\r\n        $orig = $output;\r\n\r\n        \/\/ \u79fb\u9664\u300c\u5546\u54c1\u5206\u985e\u300d\uff1aname=\"product_cat\" \u6216 id=\"dropdown_product_cat\"\r\n        if ( ! empty( $o['remove_category'] ) ) {\r\n            $output = preg_replace( '#&lt;select[^&gt;]*(name=[\"\\']product_cat[\"\\']|id=[\"\\']dropdown_product_cat[\"\\'])[^&gt;]*&gt;.*?&lt;\/select&gt;#si', '', $output );\r\n        }\r\n\r\n        \/\/ \u79fb\u9664\u300c\u54c1\u724c\u300d\uff08WooCommerce Brands \u9810\u8a2d name=\"product_brand\"\uff09\r\n        if ( ! empty( $o['remove_brand'] ) ) {\r\n            $output = preg_replace( '#&lt;select[^&gt;]*name=[\"\\']product_brand[\"\\'][^&gt;]*&gt;.*?&lt;\/select&gt;#si', '', $output );\r\n        }\r\n\r\n        return $output;\r\n    }\r\n\r\n    \/** === \u4f5c\u7528\uff1a\u65b0\u589e\u300c\u5546\u54c1\u6a19\u7c64\u300d\u7be9\u9078 === *\/\r\n    public function maybe_add_product_tag_dropdown( $post_type ) {\r\n        $o = $this-&gt;get_options();\r\n        if ( empty( $o['add_product_tag'] ) ) return;\r\n        if ( $post_type !== 'product' ) return;\r\n\r\n        $taxonomy = 'product_tag';\r\n        $tax_obj  = get_taxonomy( $taxonomy );\r\n        if ( ! $tax_obj ) return;\r\n\r\n        $selected = isset( $_GET[ $taxonomy ] ) ? sanitize_text_field( wp_unslash( $_GET[ $taxonomy ] ) ) : '';\r\n\r\n        wp_dropdown_categories( [\r\n            'show_option_all' =&gt; sprintf( esc_html__( '\u6240\u6709 %s', 'wc-admin-filter-manager' ), $tax_obj-&gt;labels-&gt;name ),\r\n            'taxonomy'        =&gt; $taxonomy,\r\n            'name'            =&gt; $taxonomy,\r\n            'orderby'         =&gt; 'name',\r\n            'selected'        =&gt; $selected,\r\n            'hierarchical'    =&gt; false,\r\n            'show_count'      =&gt; true,\r\n            'hide_empty'      =&gt; false,\r\n            'value_field'     =&gt; 'term_id',\r\n        ] );\r\n    }\r\n\r\n    public function apply_product_tag_filter( $query ) {\r\n        if ( ! is_admin() || ! $query-&gt;is_main_query() ) return $query;\r\n\r\n        global $pagenow;\r\n        if ( $pagenow !== 'edit.php' ) return $query;\r\n        if ( ( isset( $_GET['post_type'] ) ? sanitize_key( $_GET['post_type'] ) : 'post' ) !== 'product' ) return $query;\r\n\r\n        $taxonomy = 'product_tag';\r\n        if ( ! empty( $_GET[ $taxonomy ] ) &amp;&amp; is_numeric( $_GET[ $taxonomy ] ) ) {\r\n            $term = get_term_by( 'id', (int) $_GET[ $taxonomy ], $taxonomy );\r\n            if ( $term &amp;&amp; ! is_wp_error( $term ) ) {\r\n                $query-&gt;query_vars[ $taxonomy ] = $term-&gt;slug;\r\n            }\r\n        }\r\n        return $query;\r\n    }\r\n}\r\n\r\nnew WC_Admin_Filter_Manager();\r\n<\/pre>\n<p><a href=\"http:\/\/mynotes.org\/tech\/wp-content\/uploads\/2025\/09\/wc-admin-tag-filter.zip\">wc-admin-tag-filter<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u518d\u5168\u90e8\u5546\u54c1\u7684\u7ba1\u7406\u9801\u9762\uff0c\u53ef\u4ee5\u7528\u6a19\u7c64\u7be9\u9078\u5546\u54c1\u3002<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_jetpack_memberships_contains_paid_content":false,"footnotes":"","_links_to":"","_links_to_target":""},"categories":[129,43,44,127,42],"tags":[],"class_list":["post-6693","post","type-post","status-publish","format-standard","hentry","category-php-program","category-wordpress-website-built","category-plugins-wordpress-website-built","category-program","category-website-built"],"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/mynotes.org\/tech\/wp-json\/wp\/v2\/posts\/6693","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/mynotes.org\/tech\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/mynotes.org\/tech\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/mynotes.org\/tech\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/mynotes.org\/tech\/wp-json\/wp\/v2\/comments?post=6693"}],"version-history":[{"count":3,"href":"https:\/\/mynotes.org\/tech\/wp-json\/wp\/v2\/posts\/6693\/revisions"}],"predecessor-version":[{"id":6701,"href":"https:\/\/mynotes.org\/tech\/wp-json\/wp\/v2\/posts\/6693\/revisions\/6701"}],"wp:attachment":[{"href":"https:\/\/mynotes.org\/tech\/wp-json\/wp\/v2\/media?parent=6693"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/mynotes.org\/tech\/wp-json\/wp\/v2\/categories?post=6693"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/mynotes.org\/tech\/wp-json\/wp\/v2\/tags?post=6693"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}