ru-se.com

Unnamed repository; edit this file 'description' to name the repository.
Log | Files | Refs

theme-templates.php (4724B)


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