Changeset 10926 for sites/trunk/wordpress.org/public_html/wp-content/plugins/wporg-learn/inc/admin.php
- Timestamp:
- 04/26/2021 11:09:28 PM (4 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
sites/trunk/wordpress.org/public_html/wp-content/plugins/wporg-learn/inc/admin.php
r10873 r10926 3 3 namespace WPOrg_Learn\Admin; 4 4 5 use WP_Query; 6 use function WordPressdotorg\Locales\get_locale_name_from_code; 7 use function WPOrg_Learn\Post_Meta\get_available_workshop_locales; 8 5 9 defined( 'WPINC' ) || die(); 6 10 … … 9 13 */ 10 14 add_action( 'admin_notices', __NAMESPACE__ . '\show_term_translation_notice' ); 15 add_filter( 'manage_wporg_workshop_posts_columns', __NAMESPACE__ . '\add_workshop_list_table_columns' ); 16 add_action( 'manage_wporg_workshop_posts_custom_column', __NAMESPACE__ . '\render_workshop_list_table_columns', 10, 2 ); 17 add_filter( 'manage_edit-wporg_workshop_sortable_columns', __NAMESPACE__ . '\add_workshop_list_table_sortable_columns' ); 18 add_action( 'restrict_manage_posts', __NAMESPACE__ . '\add_workshop_list_table_filters', 10, 2 ); 19 add_action( 'pre_get_posts', __NAMESPACE__ . '\handle_workshop_list_table_filters' ); 11 20 12 21 /** … … 56 65 <?php 57 66 } 67 68 /** 69 * Add additional columns to the post list table for workshops. 70 * 71 * @param array $columns 72 * 73 * @return array 74 */ 75 function 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 */ 92 function 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 */ 126 function 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 */ 140 function 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 */ 176 function 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.