[ Index ] |
PHP Cross Reference of WordPress |
[Summary view] [Print] [Text view]
1 <?php 2 3 /** 4 * Sets a custom slug when creating auto-draft template parts. 5 * 6 * This is only needed for auto-drafts created by the regular WP editor. 7 * If this page is to be removed, this will not be necessary. 8 * 9 * @since 5.9.0 10 * 11 * @param int $post_id Post ID. 12 */ 13 function wp_set_unique_slug_on_create_template_part( $post_id ) { 14 $post = get_post( $post_id ); 15 if ( 'auto-draft' !== $post->post_status ) { 16 return; 17 } 18 19 if ( ! $post->post_name ) { 20 wp_update_post( 21 array( 22 'ID' => $post_id, 23 'post_name' => 'custom_slug_' . uniqid(), 24 ) 25 ); 26 } 27 28 $terms = get_the_terms( $post_id, 'wp_theme' ); 29 if ( ! is_array( $terms ) || ! count( $terms ) ) { 30 wp_set_post_terms( $post_id, wp_get_theme()->get_stylesheet(), 'wp_theme' ); 31 } 32 } 33 34 /** 35 * Generates a unique slug for templates. 36 * 37 * @access private 38 * @since 5.8.0 39 * 40 * @param string $override_slug The filtered value of the slug (starts as `null` from apply_filter). 41 * @param string $slug The original/un-filtered slug (post_name). 42 * @param int $post_ID Post ID. 43 * @param string $post_status No uniqueness checks are made if the post is still draft or pending. 44 * @param string $post_type Post type. 45 * @return string The original, desired slug. 46 */ 47 function wp_filter_wp_template_unique_post_slug( $override_slug, $slug, $post_ID, $post_status, $post_type ) { 48 if ( 'wp_template' !== $post_type && 'wp_template_part' !== $post_type ) { 49 return $override_slug; 50 } 51 52 if ( ! $override_slug ) { 53 $override_slug = $slug; 54 } 55 56 /* 57 * Template slugs must be unique within the same theme. 58 * TODO - Figure out how to update this to work for a multi-theme environment. 59 * Unfortunately using `get_the_terms()` for the 'wp-theme' term does not work 60 * in the case of new entities since is too early in the process to have been saved 61 * to the entity. So for now we use the currently activated theme for creation. 62 */ 63 $theme = wp_get_theme()->get_stylesheet(); 64 $terms = get_the_terms( $post_ID, 'wp_theme' ); 65 if ( $terms && ! is_wp_error( $terms ) ) { 66 $theme = $terms[0]->name; 67 } 68 69 $check_query_args = array( 70 'post_name__in' => array( $override_slug ), 71 'post_type' => $post_type, 72 'posts_per_page' => 1, 73 'no_found_rows' => true, 74 'post__not_in' => array( $post_ID ), 75 'tax_query' => array( 76 array( 77 'taxonomy' => 'wp_theme', 78 'field' => 'name', 79 'terms' => $theme, 80 ), 81 ), 82 ); 83 $check_query = new WP_Query( $check_query_args ); 84 $posts = $check_query->posts; 85 86 if ( count( $posts ) > 0 ) { 87 $suffix = 2; 88 do { 89 $query_args = $check_query_args; 90 $alt_post_name = _truncate_post_slug( $override_slug, 200 - ( strlen( $suffix ) + 1 ) ) . "-$suffix"; 91 $query_args['post_name__in'] = array( $alt_post_name ); 92 $query = new WP_Query( $query_args ); 93 $suffix++; 94 } while ( count( $query->posts ) > 0 ); 95 $override_slug = $alt_post_name; 96 } 97 98 return $override_slug; 99 } 100 101 /** 102 * Prints the skip-link script & styles. 103 * 104 * @access private 105 * @since 5.8.0 106 * 107 * @global string $_wp_current_template_content 108 */ 109 function the_block_template_skip_link() { 110 global $_wp_current_template_content; 111 112 // Early exit if not a block theme. 113 if ( ! current_theme_supports( 'block-templates' ) ) { 114 return; 115 } 116 117 // Early exit if not a block template. 118 if ( ! $_wp_current_template_content ) { 119 return; 120 } 121 ?> 122 123 <?php 124 /** 125 * Print the skip-link styles. 126 */ 127 ?> 128 <style id="skip-link-styles"> 129 .skip-link.screen-reader-text { 130 border: 0; 131 clip: rect(1px,1px,1px,1px); 132 clip-path: inset(50%); 133 height: 1px; 134 margin: -1px; 135 overflow: hidden; 136 padding: 0; 137 position: absolute !important; 138 width: 1px; 139 word-wrap: normal !important; 140 } 141 142 .skip-link.screen-reader-text:focus { 143 background-color: #eee; 144 clip: auto !important; 145 clip-path: none; 146 color: #444; 147 display: block; 148 font-size: 1em; 149 height: auto; 150 left: 5px; 151 line-height: normal; 152 padding: 15px 23px 14px; 153 text-decoration: none; 154 top: 5px; 155 width: auto; 156 z-index: 100000; 157 } 158 </style> 159 <?php 160 /** 161 * Print the skip-link script. 162 */ 163 ?> 164 <script> 165 ( function() { 166 var skipLinkTarget = document.querySelector( 'main' ), 167 sibling, 168 skipLinkTargetID, 169 skipLink; 170 171 // Early exit if a skip-link target can't be located. 172 if ( ! skipLinkTarget ) { 173 return; 174 } 175 176 // Get the site wrapper. 177 // The skip-link will be injected in the beginning of it. 178 sibling = document.querySelector( '.wp-site-blocks' ); 179 180 // Early exit if the root element was not found. 181 if ( ! sibling ) { 182 return; 183 } 184 185 // Get the skip-link target's ID, and generate one if it doesn't exist. 186 skipLinkTargetID = skipLinkTarget.id; 187 if ( ! skipLinkTargetID ) { 188 skipLinkTargetID = 'wp--skip-link--target'; 189 skipLinkTarget.id = skipLinkTargetID; 190 } 191 192 // Create the skip link. 193 skipLink = document.createElement( 'a' ); 194 skipLink.classList.add( 'skip-link', 'screen-reader-text' ); 195 skipLink.href = '#' + skipLinkTargetID; 196 skipLink.innerHTML = '<?php esc_html_e( 'Skip to content' ); ?>'; 197 198 // Inject the skip link. 199 sibling.parentElement.insertBefore( skipLink, sibling ); 200 }() ); 201 </script> 202 <?php 203 } 204 205 /** 206 * Enables the block templates (editor mode) for themes with theme.json by default. 207 * 208 * @access private 209 * @since 5.8.0 210 */ 211 function wp_enable_block_templates() { 212 if ( wp_is_block_theme() || WP_Theme_JSON_Resolver::theme_has_support() ) { 213 add_theme_support( 'block-templates' ); 214 } 215 }
title
Description
Body
title
Description
Body
title
Description
Body
title
Body
Generated: Tue Dec 24 01:00:02 2024 | Cross-referenced by PHPXref 0.7.1 |