特定のカスタム投稿タイプにadd_filterを適用させる方法
-
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を適用させる方法」には新たに返信することはできません。