Making WordPress.org


Ignore:
Timestamp:
08/25/2020 12:15:55 AM (6 years ago)
Author:
dufresnesteven
Message:

WordPress.org Learn: Sync with GitHub

File:
1 edited

Legend:

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

    r10201 r10202  
    201201
    202202/**
    203  * Returns whether all post for workshop
    204  *
    205  * @return array
    206  */
    207 function wporg_get_workshops( $options = null ) {
    208     $args = array(
    209         'post_type' => 'wporg_workshop',
    210     );
    211 
    212     if ( ! is_null( $options ) ) {
    213         $args = array_merge( $args, $options );
    214 
    215     }
    216 
    217     $query = new \WP_Query( $args );
    218     return $query;
     203 * Change the query for workshops in some circumstances.
     204 *
     205 * @param WP_Query $query
     206 *
     207 * @return void
     208 */
     209function wporg_workshop_modify_query( WP_Query $query ) {
     210    if ( is_admin() ) {
     211        return;
     212    }
     213
     214    if ( $query->is_main_query() && $query->is_post_type_archive( 'wporg_workshop' ) ) {
     215        $featured = wporg_get_featured_workshops();
     216
     217        if ( ! empty( $featured ) ) {
     218            $featured = reset( $featured );
     219            $query->set( 'post__not_in', array( $featured->ID ) );
     220        }
     221    }
     222
     223    if ( $query->is_main_query() && $query->is_tax( 'wporg_workshop_series' ) ) {
     224        $query->set( 'order', 'asc' );
     225    }
     226}
     227add_action( 'pre_get_posts', 'wporg_workshop_modify_query' );
     228
     229/**
     230 * Get a query object for displaying workshop posts.
     231 *
     232 * @return WP_Query
     233 */
     234function wporg_get_workshops_query( array $args = array() ) {
     235    $args = wp_parse_args( $args, array(
     236        'post_type'   => 'wporg_workshop',
     237        'post_status' => 'publish',
     238    ) );
     239
     240    return new WP_Query( $args );
     241}
     242
     243/**
     244 * Get a number of workshop posts that are marked as "featured".
     245 *
     246 * Currently there is no taxonomy or postmeta value to mark a workshop as "featured",
     247 * so we're just grabbing the most recent workshops. This may change.
     248 *
     249 * @param int $number
     250 *
     251 * @return WP_Post[]
     252 */
     253function wporg_get_featured_workshops( $number = 1 ) {
     254    $query = wporg_get_workshops_query( array(
     255        'posts_per_page' => $number,
     256    ) );
     257
     258    return $query->get_posts();
    219259}
    220260
     
    265305}
    266306
     307/**
     308 * Conditionally change or remove the prefix from archive titles.
     309 *
     310 * @param string $prefix
     311 *
     312 * @return string
     313 */
     314function wporg_modify_archive_title_prefix( $prefix ) {
     315    if ( is_post_type_archive() ) {
     316        return '';
     317    }
     318
     319    return sprintf(
     320        '<span class="archive-title-prefix">%s</span>',
     321        $prefix
     322    );
     323}
     324add_filter( 'get_the_archive_title_prefix', 'wporg_modify_archive_title_prefix' );
     325
     326/**
     327 * Get the series taxonomy term object for a workshop post.
     328 *
     329 * @param int|WP_Post|null $workshop
     330 *
     331 * @return WP_Term|bool
     332 */
     333function wporg_workshop_series_get_term( $workshop = null ) {
     334    if ( ! $workshop instanceof WP_Post ) {
     335        $workshop = get_post( $workshop );
     336    }
     337
     338    $terms = wp_get_post_terms( $workshop->ID, 'wporg_workshop_series' );
     339
     340    if ( empty( $terms ) ) {
     341        return false;
     342    }
     343
     344    return $terms[0];
     345}
     346
     347/**
     348 * Given a workshop post in a series, get all the workshop posts in the series.
     349 *
     350 * @param int|WP_Post|null $workshop
     351 *
     352 * @return WP_Post[]
     353 */
     354function wporg_workshop_series_get_siblings( $workshop = null ) {
     355    $term = wporg_workshop_series_get_term( $workshop );
     356
     357    if ( ! $term ) {
     358        return array();
     359    }
     360
     361    $args = array(
     362        'post_type'      => 'wporg_workshop',
     363        'post_status'    => 'publish',
     364        'posts_per_page' => 999,
     365        'order'          => 'asc',
     366        'tax_query'      => array(
     367            array(
     368                'taxonomy' => 'wporg_workshop_series',
     369                'terms'    => $term->term_id,
     370            ),
     371        ),
     372    );
     373
     374    return get_posts( $args );
     375}
     376
     377/**
     378 * Given a workshop post in a series, get an adjacent workshop post in the series.
     379 *
     380 * @param string           $which    Which adjacent post to retrieve. 'previous' or 'next'.
     381 * @param int|WP_Post|null $workshop
     382 *
     383 * @return WP_Post|bool
     384 */
     385function wporg_workshop_series_get_adjacent( $which, $workshop = null ) {
     386    if ( ! $workshop instanceof WP_Post ) {
     387        $workshop = get_post( $workshop );
     388    }
     389
     390    $siblings    = wporg_workshop_series_get_siblings( $workshop );
     391    $sibling_ids = wp_list_pluck( $siblings, 'ID' );
     392    $index       = array_search( $workshop->ID, $sibling_ids, true );
     393
     394    if ( false === $index ) {
     395        return false;
     396    }
     397
     398    switch ( $which ) {
     399        case 'previous':
     400            $index --;
     401            break;
     402        case 'next':
     403            $index ++;
     404            break;
     405    }
     406
     407    return $siblings[ $index ] ?? false;
     408}
Note: See TracChangeset for help on using the changeset viewer.