WordPress.org

Make WordPress Core

Ticket #16415: 16415.7.diff

File 16415.7.diff, 3.9 KB (added by wonderboymusic, 6 years ago)
  • src/wp-includes/link-template.php

     
    10951095        if ( ! $post_type_obj = get_post_type_object( $post_type ) )
    10961096                return false;
    10971097
    1098         if ( ! $post_type_obj->has_archive )
     1098        if ( ! $post_type_obj->has_archive && ! apply_filters( 'ignore_has_archive_' . $post_type, false ) )
    10991099                return false;
    11001100
    11011101        if ( get_option( 'permalink_structure' ) && is_array( $post_type_obj->rewrite ) ) {
    1102                 $struct = ( true === $post_type_obj->has_archive ) ? $post_type_obj->rewrite['slug'] : $post_type_obj->has_archive;
     1102                $struct = is_string( $post_type_obj->has_archive ) ? $post_type_obj->has_archive : $post_type_obj->rewrite['slug'];
    11031103                if ( $post_type_obj->rewrite['with_front'] )
    11041104                        $struct = $wp_rewrite->front . $struct;
    11051105                else
     
    11341134        if ( empty( $feed ) )
    11351135                $feed = $default_feed;
    11361136
     1137        $has_filter = has_filter( 'ignore_has_archive_' . $post_type, '__return_true' );
     1138        if ( ! $has_filter )
     1139                add_filter( 'ignore_has_archive_' . $post_type, '__return_true' );
     1140
    11371141        if ( ! $link = get_post_type_archive_link( $post_type ) )
    11381142                return false;
    11391143
     1144        if ( ! $has_filter )
     1145                remove_filter( 'ignore_has_archive_' . $post_type, '__return_true' );
     1146
    11401147        $post_type_obj = get_post_type_object( $post_type );
    11411148        if ( get_option( 'permalink_structure' ) && is_array( $post_type_obj->rewrite ) && $post_type_obj->rewrite['feeds'] ) {
    11421149                $link = trailingslashit( $link );
  • src/wp-includes/post-functions.php

     
    10891089                        $args->rewrite['with_front'] = true;
    10901090                if ( ! isset( $args->rewrite['pages'] ) )
    10911091                        $args->rewrite['pages'] = true;
    1092                 if ( ! isset( $args->rewrite['feeds'] ) || ! $args->has_archive )
     1092                if ( ! isset( $args->rewrite['feeds'] ) && isset( $args->has_archive ) )
    10931093                        $args->rewrite['feeds'] = (bool) $args->has_archive;
    10941094                if ( ! isset( $args->rewrite['ep_mask'] ) ) {
    10951095                        if ( isset( $args->permalink_epmask ) )
     
    11031103                else
    11041104                        add_rewrite_tag( "%$post_type%", '([^/]+)', $args->query_var ? "{$args->query_var}=" : "post_type=$post_type&name=" );
    11051105
     1106                $archive_slug = ( is_string( $args->has_archive ) && strlen( $args->has_archive ) ) ? $args->has_archive : $args->rewrite['slug'];
     1107                if ( $args->rewrite['with_front'] )
     1108                        $archive_slug = substr( $wp_rewrite->front, 1 ) . $archive_slug;
     1109                else
     1110                        $archive_slug = $wp_rewrite->root . $archive_slug;
     1111
     1112                if ( $args->rewrite['feeds'] && $wp_rewrite->feeds ) {
     1113                        $feeds = '(' . trim( implode( '|', $wp_rewrite->feeds ) ) . ')';
     1114                        add_rewrite_rule( "{$archive_slug}/feed/$feeds/?$", "index.php?post_type=$post_type" . '&feed=$matches[1]', 'top' );
     1115                        add_rewrite_rule( "{$archive_slug}/$feeds/?$", "index.php?post_type=$post_type" . '&feed=$matches[1]', 'top' );
     1116                }
     1117
    11061118                if ( $args->has_archive ) {
    1107                         $archive_slug = $args->has_archive === true ? $args->rewrite['slug'] : $args->has_archive;
    1108                         if ( $args->rewrite['with_front'] )
    1109                                 $archive_slug = substr( $wp_rewrite->front, 1 ) . $archive_slug;
    1110                         else
    1111                                 $archive_slug = $wp_rewrite->root . $archive_slug;
    1112 
    11131119                        add_rewrite_rule( "{$archive_slug}/?$", "index.php?post_type=$post_type", 'top' );
    1114                         if ( $args->rewrite['feeds'] && $wp_rewrite->feeds ) {
    1115                                 $feeds = '(' . trim( implode( '|', $wp_rewrite->feeds ) ) . ')';
    1116                                 add_rewrite_rule( "{$archive_slug}/feed/$feeds/?$", "index.php?post_type=$post_type" . '&feed=$matches[1]', 'top' );
    1117                                 add_rewrite_rule( "{$archive_slug}/$feeds/?$", "index.php?post_type=$post_type" . '&feed=$matches[1]', 'top' );
    1118                         }
    11191120                        if ( $args->rewrite['pages'] )
    11201121                                add_rewrite_rule( "{$archive_slug}/{$wp_rewrite->pagination_base}/([0-9]{1,})/?$", "index.php?post_type=$post_type" . '&paged=$matches[1]', 'top' );
    11211122                }