Making WordPress.org


Ignore:
Timestamp:
06/12/2016 10:15:16 AM (8 years ago)
Author:
obenland
Message:

Plugin Directory: Treat plugin sections like the archive they are.

Adds a special case for the term 'popular' to not require the term to be
assigned to a plugin for the plugin to show up in the term archive.

Fixes #1757.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • sites/trunk/wordpress.org/public_html/wp-content/plugins/plugin-directory/class-plugin-directory.php

    r3335 r3338  
    9999        register_taxonomy( 'plugin_section', 'plugin', array(
    100100            'hierarchical'      => true,
    101             'query_var'         => 'plugin_section',
     101            'query_var'         => 'browse',
    102102            'rewrite'           => false,
    103103            'public'            => true,
     
    109109            ),
    110110            'labels'            => array(
    111                 'name' => __( 'Plugin Sections', 'wporg-plugins' ),
     111                'name' => __( 'Browse', 'wporg-plugins' ),
    112112            ),
    113113        ) );
     
    409409
    410410        switch ( get_query_var( 'browse' ) ) {
    411             case 'beta':
    412                 $wp_query->query_vars['plugin_section'] = 'beta';
    413                 break;
    414 
    415             case 'featured':
    416                 $wp_query->query_vars['plugin_section'] = 'featured';
    417                 break;
    418 
    419411            case 'favorites':
    420412                $favorites_user = get_current_user_id();
     
    442434                $wp_query->query_vars['orderby'] = 'meta_value_num';
    443435                $wp_query->query_vars['meta_key'] = 'active_installs';
     436
     437                add_filter( 'posts_where', array( $this, 'pre_get_posts_sql_browse_popular' ) );
    444438                break;
    445439        }
    446 
     440    }
     441
     442    /**
     443     * Custom callback for pre_get_posts to remove the requirement for plugins to be tagged
     444     * 'popular' to show up when browsing popular plugins.
     445     *
     446     * @ignore
     447     *
     448     * @param string $where WHERE clause.
     449     * @return string
     450     */
     451    public function pre_get_posts_sql_browse_popular( $where ) {
     452        global $wpdb;
     453
     454        remove_filter( 'posts_where', array( $this, 'pre_get_posts_sql_browse_popular' ) );
     455        $term = get_term_by( 'slug', 'popular', 'plugin_section' );
     456
     457        return str_replace( " AND ( \n  {$wpdb->term_relationships}.term_taxonomy_id IN ({$term->term_id})\n)", '', $where );
    447458    }
    448459
     
    613624    /**
    614625     * Filters the value of tax_inputs before saving.
    615      * 
     626     *
    616627     * Used both in the admin and the uploader.
    617628     *
Note: See TracChangeset for help on using the changeset viewer.