Making WordPress.org


Ignore:
Timestamp:
09/16/2020 10:07:05 PM (5 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.