Making WordPress.org


Ignore:
Timestamp:
09/16/2020 10:07:05 PM (6 years ago)
Author:
coreymckrill
Message:

WordPress.org Learn: Sync with GitHub

https://github.com/WordPress/learn/compare/41d65294a2e67cf35a5b799d179f2e6f53b58b48...fb8968a2cbd50fc4c1a8764586731e903577d3f3

File:
1 edited

Legend:

Unmodified
Added
Removed
  • sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-learn-2020/functions.php

    r10237 r10272  
    2929 */
    3030function wporg_learn_scripts() {
    31         wp_enqueue_style( 'wporg-style', get_theme_file_uri( '/css/style.css' ), array( 'dashicons', 'open-sans' ), filemtime( __DIR__ . '/css/style.css' ) );
    32         wp_enqueue_script( 'wporg-navigation', get_template_directory_uri() . '/js/navigation.js', array(), filemtime( __DIR__ . '/js/navigation.js' ), true );
     31        wp_enqueue_style(
     32                'wporg-style',
     33                get_theme_file_uri( '/css/style.css' ),
     34                array( 'dashicons', 'open-sans' ),
     35                filemtime( __DIR__ . '/css/style.css' )
     36        );
     37        wp_enqueue_script(
     38                'wporg-navigation',
     39                get_template_directory_uri() . '/js/navigation.js',
     40                array(),
     41                filemtime( __DIR__ . '/js/navigation.js' ),
     42                true
     43        );
     44
     45        if ( is_post_type_archive( 'wporg_workshop' ) ) {
     46                wp_enqueue_style( 'select2' );
     47                wp_enqueue_script(
     48                        'wporg-filters',
     49                        get_theme_file_uri() . '/js/filters.js',
     50                        array( 'jquery', 'select2' ),
     51                        filemtime( __DIR__ . '/js/filters.js' ),
     52                        true
     53                );
     54        }
    3355}
    3456add_action( 'wp_enqueue_scripts', 'wporg_learn_scripts' );
     
    233255
    234256        if ( $query->is_main_query() && $query->is_post_type_archive( 'wporg_workshop' ) ) {
    235                 $featured = wporg_get_featured_workshops();
    236 
    237                 if ( ! empty( $featured ) ) {
    238                         $featured = reset( $featured );
    239                         $query->set( 'post__not_in', array( $featured->ID ) );
     257                wporg_workshop_maybe_apply_query_filters( $query );
     258
     259                if ( true !== $query->get( 'wporg_workshop_filters' ) ) {
     260                        $featured = wporg_get_featured_workshops();
     261
     262                        if ( ! empty( $featured ) ) {
     263                                $featured = reset( $featured );
     264                                $query->set( 'post__not_in', array( $featured->ID ) );
     265                        }
    240266                }
    241267        }
     
    246272}
    247273add_action( 'pre_get_posts', 'wporg_workshop_modify_query' );
     274
     275/**
     276 * Update a query object if filter parameters are present.
     277 *
     278 * @param WP_Query $query Query object, passed by reference.
     279 *
     280 * @return void
     281 */
     282function wporg_workshop_maybe_apply_query_filters( WP_Query &$query ) {
     283        $filters = filter_input_array(
     284                INPUT_GET,
     285                array(
     286                        'series'   => FILTER_SANITIZE_NUMBER_INT,
     287                        'topic'    => FILTER_SANITIZE_NUMBER_INT,
     288                        'language' => FILTER_SANITIZE_STRING,
     289                        'captions' => FILTER_SANITIZE_STRING,
     290                        'search'   => FILTER_SANITIZE_STRING,
     291                ),
     292                false
     293        );
     294
     295        $meta_query = array();
     296        $tax_query = array();
     297        $is_filtered = false;
     298
     299        if ( is_array( $filters ) ) {
     300                $filters = array_filter( $filters );
     301
     302                foreach ( $filters as $filter_name => $filter_value ) {
     303                        switch ( $filter_name ) {
     304                                case 'series':
     305                                        if ( ! empty( $tax_query ) ) {
     306                                                $tax_query['relation'] = 'AND';
     307                                        }
     308                                        $tax_query[] = array(
     309                                                'taxonomy' => 'wporg_workshop_series',
     310                                                'terms'    => $filter_value,
     311                                        );
     312                                        break;
     313                                case 'topic':
     314                                        if ( ! empty( $tax_query ) ) {
     315                                                $tax_query['relation'] = 'AND';
     316                                        }
     317                                        $tax_query[] = array(
     318                                                'taxonomy' => 'topic',
     319                                                'terms'    => $filter_value,
     320                                        );
     321                                        break;
     322                                case 'language':
     323                                        if ( ! empty( $meta_query ) ) {
     324                                                $meta_query['relation'] = 'AND';
     325                                        }
     326                                        $meta_query[] = array(
     327                                                'key'   => 'video_language',
     328                                                'value' => $filter_value,
     329                                        );
     330                                        break;
     331                                case 'captions':
     332                                        if ( ! empty( $meta_query ) ) {
     333                                                $meta_query['relation'] = 'AND';
     334                                        }
     335                                        $meta_query[] = array(
     336                                                'key'   => 'video_caption_language',
     337                                                'value' => $filter_value,
     338                                        );
     339                                        break;
     340                                case 'search':
     341                                        $query->set( 's', $filter_value );
     342                                        $is_filtered = true;
     343                                        break;
     344                        }
     345                }
     346        }
     347
     348        if ( ! empty( $meta_query ) ) {
     349                $query->set( 'meta_query', $meta_query );
     350                $is_filtered = true;
     351        }
     352
     353        if ( ! empty( $tax_query ) ) {
     354                $query->set( 'tax_query', $tax_query );
     355                $is_filtered = true;
     356        }
     357
     358        if ( $is_filtered ) {
     359                $query->set( 'wporg_workshop_filters', true );
     360        }
     361}
    248362
    249363/**
     
    300414
    301415        return $wp_users;
     416}
     417
     418/**
     419 * Get the bio of a user, either from profiles.wordpress.org or usermeta.
     420 *
     421 * This relies on the availability of the `bpmain_bp_xprofile_data` table, so for local environments
     422 * it falls back on values in `usermeta`.
     423 *
     424 * @param WP_User $user
     425 *
     426 * @return string
     427 */
     428function wporg_get_workshop_presenter_bio( WP_User $user ) {
     429        global $wpdb;
     430
     431        $bio = '';
     432
     433        if ( 'local' !== wp_get_environment_type() ) {
     434                $xprofile_field_id = 3;
     435
     436                $sql = $wpdb->prepare(
     437                        '
     438                                SELECT value
     439                                FROM bpmain_bp_xprofile_data
     440                                WHERE user_id = %1$d
     441                                AND field_id = %2$d
     442                        ',
     443                        $user->ID,
     444                        $xprofile_field_id
     445                );
     446
     447                $bio = $wpdb->get_var( $sql ) ?: ''; // phpcs:ignore WordPress.DB.PreparedSQL -- prepare called above.
     448        }
     449
     450        if ( ! $bio ) {
     451                $bio = $user->description;
     452        }
     453
     454        return $bio;
    302455}
    303456
     
    352505 */
    353506function wporg_workshop_series_get_term( $workshop = null ) {
     507        $workshop = get_post( $workshop );
     508
    354509        if ( ! $workshop instanceof WP_Post ) {
    355                 $workshop = get_post( $workshop );
     510                return false;
    356511        }
    357512
Note: See TracChangeset for help on using the changeset viewer.