Make WordPress Core

Ticket #17447: register_post_type_args-hook-v4.diff

File register_post_type_args-hook-v4.diff, 4.9 KB (added by MikeSchinkel, 11 years ago)

Trying different and very granular approach

  • trunk/wp-includes/post.php

    IDEA additional info:
    Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
    <+>UTF-8
     
    12101210                '_edit_link'           => 'post.php?post=%d',
    12111211        );
    12121212        $args = wp_parse_args( $args, $defaults );
     1213
     1214        $args['name'] = sanitize_key( $post_type );
     1215
     1216        if ( ! apply_filters( 'do_register_post_type', true, $args, $post_type ) ) {
     1217                return false;
     1218        }
     1219
    12131220        $args = (object) $args;
    12141221
    1215         $post_type = sanitize_key( $post_type );
    1216         $args->name = $post_type;
     1222        $post_type = $args['name'] = apply_filters( 'register_post_type_name', $args['name'], $args, $post_type );
    12171223
     1224        $args = (object) $args;
     1225
     1226        list(
     1227                $args->publicly_queryable,
     1228                $args->show_ui,
     1229                $args->show_in_menu,
     1230                $args->show_in_admin_bar,
     1231                $args->show_in_nav_menus,
     1232                $args->exclude_from_search,
     1233        ) = apply_filters( 'register_post_type_flags', array(
     1234                'publicly_queryable' => $args->publicly_queryable,
     1235                'show_ui' => $args->show_ui,
     1236                'show_in_menu' => $args->show_in_menu,
     1237                'show_in_admin_bar' => $args->show_in_admin_bar,
     1238                'show_in_nav_menus' => $args->show_in_nav_menus,
     1239                'exclude_from_search' => $args->exclude_from_search,
     1240        ), $args, $post_type );
     1241
    12181242        if ( strlen( $post_type ) > 20 )
    12191243                return new WP_Error( 'post_type_too_long', __( 'Post types cannot exceed 20 characters in length' ) );
    12201244
     
    12421266        if ( null === $args->exclude_from_search )
    12431267                $args->exclude_from_search = !$args->public;
    12441268
     1269        list(
     1270                $args->capabilities,
     1271                $args->map_meta_cap,
     1272                $args->capability_type
     1273        ) = apply_filters( 'register_post_type_capabilities', array(
     1274                'capabilities' => $args->capabilities,
     1275                'map_meta_cap' => $args->map_meta_cap,
     1276                'capability_type' => $args->capability_type
     1277        ), $args, $post_type );
     1278
     1279
    12451280        // Back compat with quirky handling in version 3.0. #14122
    12461281        if ( empty( $args->capabilities ) && null === $args->map_meta_cap && in_array( $args->capability_type, array( 'post', 'page' ) ) )
    12471282                $args->map_meta_cap = true;
     
    12721307                $wp->add_query_var( $args->query_var );
    12731308        }
    12741309
     1310        $args->rewrite = apply_filters( 'register_post_type_rewrite', $args->rewrite, $args, $post_type );
     1311
    12751312        if ( false !== $args->rewrite && ( is_admin() || '' != get_option( 'permalink_structure' ) ) ) {
    12761313                if ( ! is_array( $args->rewrite ) )
    12771314                        $args->rewrite = array();
     
    12901327                                $args->rewrite['ep_mask'] = EP_PERMALINK;
    12911328                }
    12921329
     1330                $args->hierarchical = apply_filters( 'register_post_type_hierarchical', $args->hierarchical, $args, $post_type );
     1331
    12931332                if ( $args->hierarchical )
    12941333                        add_rewrite_tag( "%$post_type%", '(.+?)', $args->query_var ? "{$args->query_var}=" : "post_type=$post_type&pagename=" );
    12951334                else
    12961335                        add_rewrite_tag( "%$post_type%", '([^/]+)', $args->query_var ? "{$args->query_var}=" : "post_type=$post_type&name=" );
    12971336
     1337                $args->has_archive = apply_filters( 'register_post_type_has_archive', $args->has_archive, $args, $post_type );
     1338
    12981339                if ( $args->has_archive ) {
    12991340                        $archive_slug = $args->has_archive === true ? $args->rewrite['slug'] : $args->has_archive;
    13001341                        if ( $args->rewrite['with_front'] )
     
    13021343                        else
    13031344                                $archive_slug = $wp_rewrite->root . $archive_slug;
    13041345
     1346                        $archive_slug = apply_filters( 'register_post_type_archive_slug', $archive_slug, $args, $post_type );
     1347
    13051348                        add_rewrite_rule( "{$archive_slug}/?$", "index.php?post_type=$post_type", 'top' );
    13061349                        if ( $args->rewrite['feeds'] && $wp_rewrite->feeds ) {
    13071350                                $feeds = '(' . trim( implode( '|', $wp_rewrite->feeds ) ) . ')';
     
    13141357
    13151358                $permastruct_args = $args->rewrite;
    13161359                $permastruct_args['feed'] = $permastruct_args['feeds'];
     1360                $permastruct_args = apply_filters( 'register_post_type_permastruct_args', $permastruct_args, $args, $post_type );
    13171361                add_permastruct( $post_type, "{$args->rewrite['slug']}/%$post_type%", $permastruct_args );
    13181362        }
    13191363
     1364        $args->register_meta_box_cb = apply_filters( 'register_post_type_meta_box_cb', $args->register_meta_box_cb, $args, $post_type );
    13201365        if ( $args->register_meta_box_cb )
    13211366                add_action( 'add_meta_boxes_' . $post_type, $args->register_meta_box_cb, 10, 1 );
    13221367
    1323         $args->labels = get_post_type_labels( $args );
     1368        $args->labels = get_post_type_labels( apply_filters( 'register_post_type_labels', $args, $post_type ) );
    13241369        $args->label = $args->labels->name;
    13251370
    13261371        $wp_post_types[ $post_type ] = $args;
    13271372
    13281373        add_action( 'future_' . $post_type, '_future_post_hook', 5, 2 );
    13291374
     1375        $args->taxonomies = apply_filters( 'register_post_type_taxonomies', $args->taxonomies, $post_type );
    13301376        foreach ( $args->taxonomies as $taxonomy ) {
    13311377                register_taxonomy_for_object_type( $taxonomy, $post_type );
    13321378        }
     
    14321478        if ( $args->map_meta_cap )
    14331479                _post_type_meta_capabilities( $capabilities );
    14341480
    1435         return (object) $capabilities;
     1481        return (object) apply_filters( 'get_post_type_capabilities', $capabilities, $args );
    14361482}
    14371483
    14381484/**