Changeset 47214
- Timestamp:
- 02/08/2020 12:59:44 PM (5 years ago)
- Location:
- trunk/src/wp-content/themes/twentynineteen
- Files:
-
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/wp-content/themes/twentynineteen/functions.php
r46827 r47214 306 306 307 307 /** 308 * Common theme functions. 309 */ 310 require get_template_directory() . '/inc/helper-functions.php'; 311 312 /** 313 * SVG Icons related functions. 314 */ 315 require get_template_directory() . '/inc/icon-functions.php'; 316 317 /** 308 318 * Enhance the theme by hooking into WordPress. 309 319 */ … … 311 321 312 322 /** 313 * SVG Icons related functions.314 */315 require get_template_directory() . '/inc/icon-functions.php';316 317 /**318 323 * Custom template tags for the theme. 319 324 */ -
trunk/src/wp-content/themes/twentynineteen/inc/icon-functions.php
r46827 r47214 51 51 } 52 52 add_filter( 'walker_nav_menu_start_el', 'twentynineteen_nav_menu_social_icons', 10, 4 ); 53 54 /** 55 * Add a dropdown icon to top-level menu items. 56 * 57 * @param string $output Nav menu item start element. 58 * @param object $item Nav menu item. 59 * @param int $depth Depth. 60 * @param object $args Nav menu args. 61 * @return string Nav menu item start element. 62 * Add a dropdown icon to top-level menu items 63 */ 64 function twentynineteen_add_dropdown_icons( $output, $item, $depth, $args ) { 65 66 // Only add class to 'top level' items on the 'primary' menu. 67 if ( ! isset( $args->theme_location ) || 'menu-1' !== $args->theme_location ) { 68 return $output; 69 } 70 71 if ( in_array( 'mobile-parent-nav-menu-item', $item->classes, true ) && isset( $item->original_id ) ) { 72 // Inject the keyboard_arrow_left SVG inside the parent nav menu item, and let the item link to the parent item. 73 // @todo Only do this for nested submenus? If on a first-level submenu, then really the link could be "#" since the desire is to remove the target entirely. 74 $link = sprintf( 75 '<button class="menu-item-link-return" tabindex="-1">%s', 76 twentynineteen_get_icon_svg( 'chevron_left', 24 ) 77 ); 78 79 // Replace opening <a> with <button>. 80 $output = preg_replace( 81 '/<a\s.*?>/', 82 $link, 83 $output, 84 1 // Limit. 85 ); 86 87 // Replace closing </a> with </button>. 88 $output = preg_replace( 89 '#</a>#i', 90 '</button>', 91 $output, 92 1 // Limit. 93 ); 94 95 } elseif ( in_array( 'menu-item-has-children', $item->classes, true ) ) { 96 97 // Add SVG icon to parent items. 98 $icon = twentynineteen_get_icon_svg( 'keyboard_arrow_down', 24 ); 99 100 $output .= sprintf( 101 '<button class="submenu-expand" tabindex="-1">%s</button>', 102 $icon 103 ); 104 } 105 106 return $output; 107 } 108 add_filter( 'walker_nav_menu_start_el', 'twentynineteen_add_dropdown_icons', 10, 4 ); -
trunk/src/wp-content/themes/twentynineteen/inc/template-functions.php
r47122 r47214 97 97 98 98 /** 99 * Determines if post thumbnail can be displayed.100 */101 function twentynineteen_can_show_post_thumbnail() {102 return apply_filters( 'twentynineteen_can_show_post_thumbnail', ! post_password_required() && ! is_attachment() && has_post_thumbnail() );103 }104 105 /**106 * Returns true if image filters are enabled on the theme options.107 */108 function twentynineteen_image_filters_enabled() {109 return 0 !== get_theme_mod( 'image_filter', 1 );110 }111 112 /**113 99 * Add custom sizes attribute to responsive image functionality for post thumbnails. 114 100 * … … 131 117 } 132 118 add_filter( 'wp_get_attachment_image_attributes', 'twentynineteen_post_thumbnail_sizes_attr', 10, 1 ); 133 134 /**135 * Returns the size for avatars used in the theme.136 */137 function twentynineteen_get_avatar_size() {138 return 60;139 }140 141 /**142 * Returns true if comment is by author of the post.143 *144 * @see get_comment_class()145 */146 function twentynineteen_is_comment_by_post_author( $comment = null ) {147 if ( is_object( $comment ) && $comment->user_id > 0 ) {148 $user = get_userdata( $comment->user_id );149 $post = get_post( $comment->comment_post_ID );150 if ( ! empty( $user ) && ! empty( $post ) ) {151 return $comment->user_id === $post->post_author;152 }153 }154 return false;155 }156 157 /**158 * Returns information about the current post's discussion, with cache support.159 */160 function twentynineteen_get_discussion_data() {161 static $discussion, $post_id;162 163 $current_post_id = get_the_ID();164 if ( $current_post_id === $post_id ) {165 return $discussion; /* If we have discussion information for post ID, return cached object */166 } else {167 $post_id = $current_post_id;168 }169 170 $comments = get_comments(171 array(172 'post_id' => $current_post_id,173 'orderby' => 'comment_date_gmt',174 'order' => get_option( 'comment_order', 'asc' ), /* Respect comment order from Settings » Discussion. */175 'status' => 'approve',176 'number' => 20, /* Only retrieve the last 20 comments, as the end goal is just 6 unique authors */177 )178 );179 180 $authors = array();181 foreach ( $comments as $comment ) {182 $authors[] = ( (int) $comment->user_id > 0 ) ? (int) $comment->user_id : $comment->comment_author_email;183 }184 185 $authors = array_unique( $authors );186 $discussion = (object) array(187 'authors' => array_slice( $authors, 0, 6 ), /* Six unique authors commenting on the post. */188 'responses' => get_comments_number( $current_post_id ), /* Number of responses. */189 );190 191 return $discussion;192 }193 119 194 120 /** … … 251 177 252 178 /** 253 * Add a dropdown icon to top-level menu items.254 *255 * @param string $output Nav menu item start element.256 * @param object $item Nav menu item.257 * @param int $depth Depth.258 * @param object $args Nav menu args.259 * @return string Nav menu item start element.260 * Add a dropdown icon to top-level menu items261 */262 function twentynineteen_add_dropdown_icons( $output, $item, $depth, $args ) {263 264 // Only add class to 'top level' items on the 'primary' menu.265 if ( ! isset( $args->theme_location ) || 'menu-1' !== $args->theme_location ) {266 return $output;267 }268 269 if ( in_array( 'mobile-parent-nav-menu-item', $item->classes, true ) && isset( $item->original_id ) ) {270 // Inject the keyboard_arrow_left SVG inside the parent nav menu item, and let the item link to the parent item.271 // @todo Only do this for nested submenus? If on a first-level submenu, then really the link could be "#" since the desire is to remove the target entirely.272 $link = sprintf(273 '<button class="menu-item-link-return" tabindex="-1">%s',274 twentynineteen_get_icon_svg( 'chevron_left', 24 )275 );276 277 // Replace opening <a> with <button>.278 $output = preg_replace(279 '/<a\s.*?>/',280 $link,281 $output,282 1 // Limit.283 );284 285 // Replace closing </a> with </button>.286 $output = preg_replace(287 '#</a>#i',288 '</button>',289 $output,290 1 // Limit.291 );292 293 } elseif ( in_array( 'menu-item-has-children', $item->classes, true ) ) {294 295 // Add SVG icon to parent items.296 $icon = twentynineteen_get_icon_svg( 'keyboard_arrow_down', 24 );297 298 $output .= sprintf(299 '<button class="submenu-expand" tabindex="-1">%s</button>',300 $icon301 );302 }303 304 return $output;305 }306 add_filter( 'walker_nav_menu_start_el', 'twentynineteen_add_dropdown_icons', 10, 4 );307 308 /**309 179 * Create a nav menu item to be displayed on mobile to navigate from submenu back to the parent. 310 180 * … … 340 210 } 341 211 add_filter( 'wp_nav_menu_objects', 'twentynineteen_add_mobile_parent_nav_menu_items', 10, 2 ); 342 343 /**344 * Convert HSL to HEX colors345 */346 function twentynineteen_hsl_hex( $h, $s, $l, $to_hex = true ) {347 348 $h /= 360;349 $s /= 100;350 $l /= 100;351 352 $r = $l;353 $g = $l;354 $b = $l;355 $v = ( $l <= 0.5 ) ? ( $l * ( 1.0 + $s ) ) : ( $l + $s - $l * $s );356 if ( $v > 0 ) {357 $m;358 $sv;359 $sextant;360 $fract;361 $vsf;362 $mid1;363 $mid2;364 365 $m = $l + $l - $v;366 $sv = ( $v - $m ) / $v;367 $h *= 6.0;368 $sextant = floor( $h );369 $fract = $h - $sextant;370 $vsf = $v * $sv * $fract;371 $mid1 = $m + $vsf;372 $mid2 = $v - $vsf;373 374 switch ( $sextant ) {375 case 0:376 $r = $v;377 $g = $mid1;378 $b = $m;379 break;380 case 1:381 $r = $mid2;382 $g = $v;383 $b = $m;384 break;385 case 2:386 $r = $m;387 $g = $v;388 $b = $mid1;389 break;390 case 3:391 $r = $m;392 $g = $mid2;393 $b = $v;394 break;395 case 4:396 $r = $mid1;397 $g = $m;398 $b = $v;399 break;400 case 5:401 $r = $v;402 $g = $m;403 $b = $mid2;404 break;405 }406 }407 $r = round( $r * 255, 0 );408 $g = round( $g * 255, 0 );409 $b = round( $b * 255, 0 );410 411 if ( $to_hex ) {412 413 $r = ( $r < 15 ) ? '0' . dechex( $r ) : dechex( $r );414 $g = ( $g < 15 ) ? '0' . dechex( $g ) : dechex( $g );415 $b = ( $b < 15 ) ? '0' . dechex( $b ) : dechex( $b );416 417 return "#$r$g$b";418 419 }420 421 return "rgb($r, $g, $b)";422 }
Note: See TracChangeset
for help on using the changeset viewer.