194 lines
		
	
	
		
			5.1 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			194 lines
		
	
	
		
			5.1 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
| <?php
 | |
| /**
 | |
|  * Robots template functions.
 | |
|  *
 | |
|  * @package WordPress
 | |
|  * @subpackage Robots
 | |
|  * @since 5.7.0
 | |
|  */
 | |
| 
 | |
| /**
 | |
|  * Displays the robots meta tag as necessary.
 | |
|  *
 | |
|  * Gathers robots directives to include for the current context, using the
 | |
|  * {@see 'wp_robots'} filter. The directives are then sanitized, and the
 | |
|  * robots meta tag is output if there is at least one relevant directive.
 | |
|  *
 | |
|  * @since 5.7.0
 | |
|  * @since 5.7.1 No longer prevents specific directives to occur together.
 | |
|  */
 | |
| function wp_robots() {
 | |
| 	/**
 | |
| 	 * Filters the directives to be included in the 'robots' meta tag.
 | |
| 	 *
 | |
| 	 * The meta tag will only be included as necessary.
 | |
| 	 *
 | |
| 	 * @since 5.7.0
 | |
| 	 *
 | |
| 	 * @param array $robots Associative array of directives. Every key must be the name of the directive, and the
 | |
| 	 *                      corresponding value must either be a string to provide as value for the directive or a
 | |
| 	 *                      boolean `true` if it is a boolean directive, i.e. without a value.
 | |
| 	 */
 | |
| 	$robots = apply_filters( 'wp_robots', array() );
 | |
| 
 | |
| 	$robots_strings = array();
 | |
| 	foreach ( $robots as $directive => $value ) {
 | |
| 		if ( is_string( $value ) ) {
 | |
| 			// If a string value, include it as value for the directive.
 | |
| 			$robots_strings[] = "{$directive}:{$value}";
 | |
| 		} elseif ( $value ) {
 | |
| 			// Otherwise, include the directive if it is truthy.
 | |
| 			$robots_strings[] = $directive;
 | |
| 		}
 | |
| 	}
 | |
| 
 | |
| 	if ( empty( $robots_strings ) ) {
 | |
| 		return;
 | |
| 	}
 | |
| 
 | |
| 	echo "<meta name='robots' content='" . esc_attr( implode( ', ', $robots_strings ) ) . "' />\n";
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * Adds `noindex` to the robots meta tag if required by the site configuration.
 | |
|  *
 | |
|  * If a blog is marked as not being public then noindex will be output to
 | |
|  * tell web robots not to index the page content. Add this to the
 | |
|  * {@see 'wp_robots'} filter.
 | |
|  *
 | |
|  * Typical usage is as a {@see 'wp_robots'} callback:
 | |
|  *
 | |
|  *     add_filter( 'wp_robots', 'wp_robots_noindex' );
 | |
|  *
 | |
|  * @since 5.7.0
 | |
|  *
 | |
|  * @see wp_robots_no_robots()
 | |
|  *
 | |
|  * @param array $robots Associative array of robots directives.
 | |
|  * @return array Filtered robots directives.
 | |
|  */
 | |
| function wp_robots_noindex( array $robots ) {
 | |
| 	if ( ! get_option( 'blog_public' ) ) {
 | |
| 		return wp_robots_no_robots( $robots );
 | |
| 	}
 | |
| 
 | |
| 	return $robots;
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * Adds `noindex` to the robots meta tag for embeds.
 | |
|  *
 | |
|  * Typical usage is as a {@see 'wp_robots'} callback:
 | |
|  *
 | |
|  *     add_filter( 'wp_robots', 'wp_robots_noindex_embeds' );
 | |
|  *
 | |
|  * @since 5.7.0
 | |
|  *
 | |
|  * @see wp_robots_no_robots()
 | |
|  *
 | |
|  * @param array $robots Associative array of robots directives.
 | |
|  * @return array Filtered robots directives.
 | |
|  */
 | |
| function wp_robots_noindex_embeds( array $robots ) {
 | |
| 	if ( is_embed() ) {
 | |
| 		return wp_robots_no_robots( $robots );
 | |
| 	}
 | |
| 
 | |
| 	return $robots;
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * Adds `noindex` to the robots meta tag if a search is being performed.
 | |
|  *
 | |
|  * If a search is being performed then noindex will be output to
 | |
|  * tell web robots not to index the page content. Add this to the
 | |
|  * {@see 'wp_robots'} filter.
 | |
|  *
 | |
|  * Typical usage is as a {@see 'wp_robots'} callback:
 | |
|  *
 | |
|  *     add_filter( 'wp_robots', 'wp_robots_noindex_search' );
 | |
|  *
 | |
|  * @since 5.7.0
 | |
|  *
 | |
|  * @see wp_robots_no_robots()
 | |
|  *
 | |
|  * @param array $robots Associative array of robots directives.
 | |
|  * @return array Filtered robots directives.
 | |
|  */
 | |
| function wp_robots_noindex_search( array $robots ) {
 | |
| 	if ( is_search() ) {
 | |
| 		return wp_robots_no_robots( $robots );
 | |
| 	}
 | |
| 
 | |
| 	return $robots;
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * Adds `noindex` to the robots meta tag.
 | |
|  *
 | |
|  * This directive tells web robots not to index the page content.
 | |
|  *
 | |
|  * Typical usage is as a {@see 'wp_robots'} callback:
 | |
|  *
 | |
|  *     add_filter( 'wp_robots', 'wp_robots_no_robots' );
 | |
|  *
 | |
|  * @since 5.7.0
 | |
|  *
 | |
|  * @param array $robots Associative array of robots directives.
 | |
|  * @return array Filtered robots directives.
 | |
|  */
 | |
| function wp_robots_no_robots( array $robots ) {
 | |
| 	$robots['noindex'] = true;
 | |
| 
 | |
| 	if ( get_option( 'blog_public' ) ) {
 | |
| 		$robots['follow'] = true;
 | |
| 	} else {
 | |
| 		$robots['nofollow'] = true;
 | |
| 	}
 | |
| 
 | |
| 	return $robots;
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * Adds `noindex` and `noarchive` to the robots meta tag.
 | |
|  *
 | |
|  * This directive tells web robots not to index or archive the page content and
 | |
|  * is recommended to be used for sensitive pages.
 | |
|  *
 | |
|  * Typical usage is as a {@see 'wp_robots'} callback:
 | |
|  *
 | |
|  *     add_filter( 'wp_robots', 'wp_robots_sensitive_page' );
 | |
|  *
 | |
|  * @since 5.7.0
 | |
|  *
 | |
|  * @param array $robots Associative array of robots directives.
 | |
|  * @return array Filtered robots directives.
 | |
|  */
 | |
| function wp_robots_sensitive_page( array $robots ) {
 | |
| 	$robots['noindex']   = true;
 | |
| 	$robots['noarchive'] = true;
 | |
| 	return $robots;
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * Adds `max-image-preview:large` to the robots meta tag.
 | |
|  *
 | |
|  * This directive tells web robots that large image previews are allowed to be
 | |
|  * displayed, e.g. in search engines, unless the blog is marked as not being public.
 | |
|  *
 | |
|  * Typical usage is as a {@see 'wp_robots'} callback:
 | |
|  *
 | |
|  *     add_filter( 'wp_robots', 'wp_robots_max_image_preview_large' );
 | |
|  *
 | |
|  * @since 5.7.0
 | |
|  *
 | |
|  * @param array $robots Associative array of robots directives.
 | |
|  * @return array Filtered robots directives.
 | |
|  */
 | |
| function wp_robots_max_image_preview_large( array $robots ) {
 | |
| 	if ( get_option( 'blog_public' ) ) {
 | |
| 		$robots['max-image-preview'] = 'large';
 | |
| 	}
 | |
| 	return $robots;
 | |
| }
 |