サポート » 使い方全般 » 特定のカスタム投稿タイプにadd_filterを適用させる方法

  • yukikaze

    (@yukikaze)


    function.php に記述した add_filter を、特定の表示にのみ適用させるには、どうしたら良いでしょうか。

    function check_custom_rules() {
        global $wp_rewrite, $add_cutom_post_rules;
    
        if ( ! $wp_rewrite->using_permalinks() ) { return; }
        $add_cutom_post_rules = array();
        $rule_templates = array(
            '/'                                                         => '',
            '/([0-9]{1,})/'                                             => '&p=$matches[1]',
            '/page/([0-9]{1,})/'                                        => '&paged=$matches[1]',
            '/date/([0-9]{4})/'                                         => '&year=$matches[1]',
            '/date/([0-9]{4})/page/([0-9]{1,})/'                        => '&year=$matches[1]&paged=$matches[2]',
            '/date/([0-9]{4})/([0-9]{2})/'                              => '&year=$matches[1]&monthnum=$matches[2]',
            '/date/([0-9]{4})/([0-9]{2})/page/([0-9]{1,})/'             => '&year=$matches[1]&monthnum=$matches[2]&paged=$matches[3]',
            '/date/([0-9]{4})/([0-9]{2})/([0-9]{2})/'                   => '&year=$matches[1]&monthnum=$matches[2]&day=$matches[3]',
            '/date/([0-9]{4})/([0-9]{2})/([0-9]{2})/page/([0-9]{1,})/'  => '&year=$matches[1]&monthnum=$matches[2]&day=$matches[3]&paged=$matches[4]',
        );
        $post_types = get_post_types( array( 'public' => true, 'show_ui' => true ), false );
    
        if ( $post_types ) {
            foreach ( $post_types as $post_type_slug => $post_type ) {
                if ( ! isset( $post_type->_builtin ) || ! $post_type->_builtin ) {
                    foreach ( $rule_templates as $regex => $rule ) {
                        $add_cutom_post_rules[ $post_type_slug . $regex . '?$' ] = $wp_rewrite->index . '?post_type=' . $post_type_slug . $rule;
                    }
                }
            }
        }
    
        if ( $add_cutom_post_rules ) {
            $rules = $wp_rewrite->wp_rewrite_rules();
            foreach ( $add_cutom_post_rules as $regex => $rule ) {
                if ( ! isset( $rules[$regex] ) ) {
                    $wp_rewrite->flush_rules();
                    break;
                }
            }
        }
    }
    add_action( 'init', 'check_custom_rules' );
    
    function add_custom_type_index_rules( $rules ) {
        global $add_cutom_post_rules;
        if ( $add_cutom_post_rules && is_array( $add_cutom_post_rules ) ) {
            $rules = array_merge( $add_cutom_post_rules, $rules );
        }
        return $rules;
    }
    add_filter( 'rewrite_rules_array', 'add_custom_type_index_rules' );

    上記を記述すると、全ての表示に適用されてしまいます。
    これを、特定のカスタム投稿タイプ(post_type=information)の年アーカイブのみに適用させるには、どうしたら良いでしょうか。

    年アーカイブは、date.php を使用しています。

    よろしくお願いいたします。

  • トピック「特定のカスタム投稿タイプにadd_filterを適用させる方法」には新たに返信することはできません。