Making WordPress.org

Ticket #4063: themes.4063.diff

File themes.4063.diff, 5.0 KB (added by dd32, 6 years ago)
  • query-modifications.php

    function wporg_themes_pre_get_posts( $qu 
    3030
    3131        // Force the browse query_var when querying for a users favorites
    3232        if ( !empty( $query->query_vars['favorites_user'] ) ) {
    3333                $query->query_vars['browse'] = 'favorites';
    3434        }
    3535
    3636        // eliminate draft posts from showing up in the directory
    3737        if ( !isset( $query->query_vars['post_status'] ) ) {
    3838                $query->query_vars['post_status'] = 'publish';
    3939        }
    4040
    4141        switch ( $query->query_vars['browse'] ) {
    4242                case 'new':
    4343                        $query->query_vars['orderby'] = 'post_date';
    4444                        $query->query_vars['order'] = 'DESC';
     45                        $query->is_archive = true;
    4546                        break;
    4647
    4748                case 'updated':
    4849                        $query->query_vars['orderby'] = 'modified';
    4950                        $query->query_vars['order'] = 'DESC';
     51                        $query->is_archive = true;
    5052                        break;
    5153
    5254                case 'featured':
    5355                        // Pages > 1 don't exist.
    5456                        if ( isset( $query->query_vars['paged'] ) && $query->query_vars['paged'] > 1 ) {
    5557                                // Force a 404
    5658                                $query->query_vars['post__in'] = array( 0 );
    5759                        }
    5860
    5961                        $query->query_vars['posts_per_page'] = $query->found_posts = 15;
    6062                        // Featured themes require it to have been updated within the last year, not the default 2.
    6163                        $query->query_vars['date_query']['recent_themes_only'] = array(
    6264                                'column' => 'post_modified',
    6365                                'after'  => date( 'Y-m-d', strtotime( '-1 year' ) )
    6466                        );
    6567
    6668                        // Some themes are always featured by ways of the menu_order
    6769                        $query->query_vars['orderby'] = 'menu_order DESC, RAND(' . date( 'Ymd' ) . ')';
    6870                        $query->query_vars['no_found_rows'] = true;
     71                        $query->is_archive = true;
    6972                        break;
    7073
    7174                case 'favorites':
    7275                        $favorites = array();
    7376
    7477                        if ( ! empty( $query->query_vars['favorites_user'] ) ) {
    7578                                $user_id = get_user_by( 'login', $query->query_vars['favorites_user'] )->ID;
    7679                        } elseif ( is_user_logged_in() ) {
    7780                                $user_id = get_current_user_id();
    7881                        }
    7982
    8083                        if ( ! empty( $user_id ) ) {
    8184                                $favorites = array_filter( (array) get_user_meta( $user_id, 'theme_favorites', true ) );
    8285                        }
    8386
    8487                        if ( $favorites ) {
    8588                                $query->query_vars['post_name__in'] = $favorites;
    8689                        } else {
    8790                                // Force a 404
    8891                                $query->query_vars['post__in'] = array( 0 );
    8992                        }
    9093
    9194                        $query->query_vars['orderby'] = 'post_title';
    9295                        $query->query_vars['order'] = 'ASC';
     96                        $query->is_archive = true;
    9397                        break;
    9498
    9599                case 'popular':
    96100                        // Only include themes that have existed for at least 2 weeks into the popular listing
    97101                        // This avoids cases where a new theme skews our popularity algorithms.
    98102                        $query->query_vars['date_query']['existing_themes_only'] = array(
    99103                                'column' => 'post_date',
    100104                                'before'  => date( 'Y-m-d', strtotime( '-2 weeks' ) )
    101105                        );
    102106
    103107                        // Sort by the popularity meta key
    104108                        $query->query_vars['meta_key'] = '_popularity';
    105109                        $query->query_vars['meta_type'] = 'DECIMAL(20,10)';
    106110                        $query->query_vars['orderby'] = 'meta_value DESC';
     111                        $query->is_archive = true;
    107112                        break;
    108113        }
    109114
    110115        // Unless a specific theme, or author is being requested, limit results to the last 2 years.
    111116        if ( empty( $query->query_vars['name'] ) && empty( $query->query_vars['author_name'] ) && ! in_array( $query->query_vars['browse'], array( 'favorites', 'new', 'updated' ) ) ) {
    112117                $query->query_vars['date_query']['recent_themes_only'] = array(
    113118                        'column' => 'post_modified',
    114119                        'after'  => date( 'Y-m-d', strtotime( '-2 years' ) ),
    115120                );
    116121        }
    117122
    118123        // Prioritize translated themes for localized requests, except when viewing a specific ordered themes.
    119124        if ( 'en_US' !== get_locale() && ! in_array( $query->query_vars['browse'], array( 'favorites', 'new', 'updated' ) )  ) {
    120125                add_filter( 'posts_clauses', 'wporg_themes_prioritize_translated_posts_clauses' );
    121126        }
  • theme-directory.php

    function wporg_themes_add_hreflang_link_ 
    11641164                $url = sprintf(
    11651165                        'https://%swordpress.org%s',
    11661166                        $site->subdomain ? "{$site->subdomain}." : '',
    11671167                        $path
    11681168                );
    11691169
    11701170                printf(
    11711171                        '<link rel="alternate" href="%s" hreflang="%s" />',
    11721172                        esc_url( $url ),
    11731173                        esc_attr( $site->hreflang )
    11741174                );
    11751175        }
    11761176        echo "\n";
    11771177}
    11781178add_action( 'wp_head', 'wporg_themes_add_hreflang_link_attributes' );
     1179
     1180function wporg_themes_archive_link_rel_prev_next() {
     1181        global $paged, $wp_query;
     1182
     1183        if ( ! is_archive() && ! is_search() ) {
     1184                return;
     1185        }
     1186
     1187        $max_page = $wp_query->max_num_pages;
     1188        if ( ! $paged ) {
     1189                $paged = 1;
     1190        }
     1191
     1192        $nextpage = intval( $paged ) + 1;
     1193        $prevpage = intval( $paged ) - 1;
     1194
     1195        if ( $prevpage >= 1 ) {
     1196                printf(
     1197                        '<link rel="prev" href="%s">' . "\n",
     1198                        esc_url( get_pagenum_link( $prevpage ) )
     1199                );
     1200        }
     1201
     1202        if ( $nextpage <= $max_page ) {
     1203                printf(
     1204                        '<link rel="next" href="%s">' . "\n",
     1205                        esc_url( get_pagenum_link( $nextpage ) )
     1206                );
     1207        }
     1208}
     1209add_action( 'wp_head', 'wporg_themes_archive_link_rel_prev_next' );
     1210 No newline at end of file