Making WordPress.org


Ignore:
Timestamp:
04/26/2021 11:09:28 PM (4 years ago)
Author:
coreymckrill
Message:

WordPress.org Learn: Sync with GitHub

https://github.com/WordPress/learn/commit/5133da6d34c524f7b4685400c8359842153fbf17

File:
1 edited

Legend:

Unmodified
Added
Removed
  • sites/trunk/wordpress.org/public_html/wp-content/plugins/wporg-learn/inc/admin.php

    r10873 r10926  
    33namespace WPOrg_Learn\Admin;
    44
     5use WP_Query;
     6use function WordPressdotorg\Locales\get_locale_name_from_code;
     7use function WPOrg_Learn\Post_Meta\get_available_workshop_locales;
     8
    59defined( 'WPINC' ) || die();
    610
     
    913 */
    1014add_action( 'admin_notices', __NAMESPACE__ . '\show_term_translation_notice' );
     15add_filter( 'manage_wporg_workshop_posts_columns', __NAMESPACE__ . '\add_workshop_list_table_columns' );
     16add_action( 'manage_wporg_workshop_posts_custom_column', __NAMESPACE__ . '\render_workshop_list_table_columns', 10, 2 );
     17add_filter( 'manage_edit-wporg_workshop_sortable_columns', __NAMESPACE__ . '\add_workshop_list_table_sortable_columns' );
     18add_action( 'restrict_manage_posts', __NAMESPACE__ . '\add_workshop_list_table_filters', 10, 2 );
     19add_action( 'pre_get_posts', __NAMESPACE__ . '\handle_workshop_list_table_filters' );
    1120
    1221/**
     
    5665    <?php
    5766}
     67
     68/**
     69 * Add additional columns to the post list table for workshops.
     70 *
     71 * @param array $columns
     72 *
     73 * @return array
     74 */
     75function add_workshop_list_table_columns( $columns ) {
     76    $columns = array_slice( $columns, 0, -2, true )
     77                + array( 'video_language' => __( 'Language', 'wporg-learn' ) )
     78                + array( 'video_caption_language' => __( 'Captions', 'wporg-learn' ) )
     79                + array_slice( $columns, -2, 2, true );
     80
     81    return $columns;
     82}
     83
     84/**
     85 * Render the cell contents for the additional columns in the post list table for workshops.
     86 *
     87 * @param string $column_name
     88 * @param int    $post_id
     89 *
     90 * @return void
     91 */
     92function render_workshop_list_table_columns( $column_name, $post_id ) {
     93    $post = get_post( $post_id );
     94
     95    switch ( $column_name ) {
     96        case 'video_language':
     97            printf(
     98                '%s [%s]',
     99                esc_html( get_locale_name_from_code( $post->video_language, 'english' ) ),
     100                esc_html( $post->video_language )
     101            );
     102            break;
     103        case 'video_caption_language':
     104            $captions = get_post_meta( $post->ID, 'video_caption_language' );
     105
     106            echo esc_html( implode(
     107                ', ',
     108                array_map(
     109                    function( $caption_lang ) {
     110                        return get_locale_name_from_code( $caption_lang, 'english' );
     111                    },
     112                    $captions
     113                )
     114            ) );
     115            break;
     116    }
     117}
     118
     119/**
     120 * Make additional columns sortable.
     121 *
     122 * @param array $sortable_columns
     123 *
     124 * @return array
     125 */
     126function add_workshop_list_table_sortable_columns( $sortable_columns ) {
     127    $sortable_columns['video_language'] = 'video_language';
     128
     129    return $sortable_columns;
     130}
     131
     132/**
     133 * Add filtering controls for the workshops list table.
     134 *
     135 * @param string $post_type
     136 * @param string $which
     137 *
     138 * @return void
     139 */
     140function add_workshop_list_table_filters( $post_type, $which ) {
     141    if ( 'wporg_workshop' !== $post_type || 'top' !== $which ) {
     142        return;
     143    }
     144
     145    $available_locales = get_available_workshop_locales( 'video_language', 'english', false );
     146    $language          = filter_input( INPUT_GET, 'language', FILTER_SANITIZE_STRING );
     147
     148    ?>
     149    <label for="filter-by-language" class="screen-reader-text">
     150        <?php esc_html_e( 'Filter by language', 'wporg-learn' ); ?>
     151    </label>
     152    <select id="filter-by-language" name="language">
     153        <option value=""<?php selected( ! $language ); ?>><?php esc_html_e( 'Any language', 'wporg-learn' ); ?></option>
     154        <?php foreach ( $available_locales as $code => $name ) : ?>
     155            <option value="<?php echo esc_attr( $code ); ?>"<?php selected( $code, $language ); ?>>
     156                <?php
     157                printf(
     158                    '%s [%s]',
     159                    esc_html( $name ),
     160                    esc_html( $code )
     161                );
     162                ?>
     163            </option>
     164        <?php endforeach; ?>
     165    </select>
     166    <?php
     167}
     168
     169/**
     170 * Alter the query to include workshop list table filters.
     171 *
     172 * @param WP_Query $query
     173 *
     174 * @return void
     175 */
     176function handle_workshop_list_table_filters( WP_Query $query ) {
     177    if ( ! is_admin() ) {
     178        return;
     179    }
     180
     181    $current_screen = get_current_screen();
     182
     183    if ( 'edit-wporg_workshop' === $current_screen->id ) {
     184        $language = filter_input( INPUT_GET, 'language', FILTER_SANITIZE_STRING );
     185
     186        if ( $language ) {
     187            $meta_query = $query->get( 'meta_query', array() );
     188
     189            if ( ! empty( $meta_query ) ) {
     190                $meta_query = array(
     191                    'relation' => 'AND',
     192                    $meta_query,
     193                );
     194            }
     195
     196            $meta_query[] = array(
     197                'key'   => 'video_language',
     198                'value' => $language,
     199            );
     200
     201            $query->set( 'meta_query', $meta_query );
     202        }
     203
     204        if ( 'video_language' === $query->get( 'orderby' ) ) {
     205            $query->set( 'meta_key', 'video_language' );
     206            $query->set( 'orderby', 'meta_value' );
     207        }
     208    }
     209}
Note: See TracChangeset for help on using the changeset viewer.