[ Index ] |
PHP Cross Reference of WordPress Trunk (Updated Daily) |
[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, 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 = 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 * Enqueues the skip-link script & styles. 103 * 104 * @access private 105 * @since 6.4.0 106 * 107 * @global string $_wp_current_template_content 108 */ 109 function wp_enqueue_block_template_skip_link() { 110 global $_wp_current_template_content; 111 112 // Back-compat for plugins that disable functionality by unhooking this action. 113 if ( ! has_action( 'wp_footer', 'the_block_template_skip_link' ) ) { 114 return; 115 } 116 remove_action( 'wp_footer', 'the_block_template_skip_link' ); 117 118 // Early exit if not a block theme. 119 if ( ! current_theme_supports( 'block-templates' ) ) { 120 return; 121 } 122 123 // Early exit if not a block template. 124 if ( ! $_wp_current_template_content ) { 125 return; 126 } 127 128 $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 159 $handle = 'wp-block-template-skip-link'; 160 161 /** 162 * Print the skip-link styles. 163 */ 164 wp_register_style( $handle, false ); 165 wp_add_inline_style( $handle, $skip_link_styles ); 166 wp_enqueue_style( $handle ); 167 168 /** 169 * Enqueue the skip-link script. 170 */ 171 ob_start(); 172 ?> 173 <script> 174 ( function() { 175 var skipLinkTarget = document.querySelector( 'main' ), 176 sibling, 177 skipLinkTargetID, 178 skipLink; 179 180 // Early exit if a skip-link target can't be located. 181 if ( ! skipLinkTarget ) { 182 return; 183 } 184 185 /* 186 * Get the site wrapper. 187 * The skip-link will be injected in the beginning of it. 188 */ 189 sibling = document.querySelector( '.wp-site-blocks' ); 190 191 // Early exit if the root element was not found. 192 if ( ! sibling ) { 193 return; 194 } 195 196 // Get the skip-link target's ID, and generate one if it doesn't exist. 197 skipLinkTargetID = skipLinkTarget.id; 198 if ( ! skipLinkTargetID ) { 199 skipLinkTargetID = 'wp--skip-link--target'; 200 skipLinkTarget.id = skipLinkTargetID; 201 } 202 203 // Create the skip link. 204 skipLink = document.createElement( 'a' ); 205 skipLink.classList.add( 'skip-link', 'screen-reader-text' ); 206 skipLink.id = 'wp-skip-link'; 207 skipLink.href = '#' + skipLinkTargetID; 208 skipLink.innerHTML = '<?php /* translators: Hidden accessibility text. */ esc_html_e( 'Skip to content' ); ?>'; 209 210 // Inject the skip link. 211 sibling.parentElement.insertBefore( skipLink, sibling ); 212 }() ); 213 </script> 214 <?php 215 $skip_link_script = wp_remove_surrounding_empty_script_tags( ob_get_clean() ); 216 $script_handle = 'wp-block-template-skip-link'; 217 wp_register_script( $script_handle, false, array(), false, array( 'in_footer' => true ) ); 218 wp_add_inline_script( $script_handle, $skip_link_script ); 219 wp_enqueue_script( $script_handle ); 220 } 221 222 /** 223 * Enables the block templates (editor mode) for themes with theme.json by default. 224 * 225 * @access private 226 * @since 5.8.0 227 */ 228 function wp_enable_block_templates() { 229 if ( wp_is_block_theme() || wp_theme_has_theme_json() ) { 230 add_theme_support( 'block-templates' ); 231 } 232 }
title
Description
Body
title
Description
Body
title
Description
Body
title
Body
Generated : Tue Dec 24 08:20:01 2024 | Cross-referenced by PHPXref |